# openFrameworks OS X makefile # # make help : shows this message # make Debug: makes the application with debug symbols # make Release: makes the app with optimizations # make: the same as make Release # make CleanDebug: cleans the Debug target # make CleanRelease: cleans the Release target # make clean: cleans everything # # # this should work with any OF app, just copy any example # change the name of the folder and it should compile # only .cpp support, don't use .c files # it will look for files in any folder inside the application # folder except that in the EXCLUDE_FROM_SOURCE variable # it doesn't autodetect include paths yet # add the include paths in the USER_CFLAGS variable # using the gcc syntax: -Ipath # # to add addons to your application, edit the addons.make file # in this directory and add the names of the addons you want to # include # # edit the following vars to customize the makefile include config.mak ARCH = i386 COMPILER_OPTIMIZATION = $(USER_COMPILER_OPTIMIZATION) EXCLUDE_FROM_SOURCE="bin,.xcodeproj,obj" # you shouldn't modify anything below this line SHELL = /bin/sh CXX = g++ LIBSPATH=osx NODEPS = clean SED_EXCLUDE_FROM_SRC = $(shell echo $(EXCLUDE_FROM_SOURCE) | sed s/\,/\\\\\|/g) SOURCE_DIRS = src #$(shell find . -maxdepth 1 -mindepth 1 -type d | grep -v $(SED_EXCLUDE_FROM_SRC) | sed s/.\\///) SOURCES = $(shell find $(SOURCE_DIRS) -name "*.cpp" -or -name "*.c") OBJFILES = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES))) APPNAME = $(shell basename `pwd`) CORE_INCLUDES = $(shell find $(OF_ROOT)/libs/openFrameworks/ -type d) CORE_INCLUDE_FLAGS = $(addprefix -I,$(CORE_INCLUDES)) INCLUDES = $(shell find $(OF_ROOT)/libs/*/include -type d | grep -v glu | grep -v quicktime | grep -v poco) INCLUDES_FLAGS = $(addprefix -I,$(INCLUDES)) INCLUDES_FLAGS += -I$(OF_ROOT)/libs/poco/include INCLUDES_FLAGS += -I$(OF_ROOT)/libs/glu/include #INCLUDES_FLAGS += -I$(OF_ROOT)/libs/quicktime/include LIB_STATIC = $(shell ls $(OF_ROOT)/libs/*/lib/$(LIBSPATH)/*.a | grep -v openFrameworksCompiled | grep -v poco) LIB_STATIC += $(OF_ROOT)/libs/fmodex/lib/osx/libfmodex.dylib LIB_SHARED = $(shell ls $(OF_ROOT)/libs/*/lib/$(LIBSPATH)/*.so | grep -v openFrameworksCompiled | grep -v poco) LIB_STATIC += $(OF_ROOT)/libs/poco/lib/$(LIBSPATH)/PocoNet.a $(OF_ROOT)/libs/poco/lib/$(LIBSPATH)/PocoXML.a $(OF_ROOT)/libs/poco/lib/$(LIBSPATH)/PocoUtil.a $(OF_ROOT)/libs/poco/lib/$(LIBSPATH)/PocoFoundation.a LIB_PATHS_FLAGS = $(shell ls -d $(OF_ROOT)/libs/*/lib/$(LIBSPATH) | sed "s/\(\.*\)/-L\1/") CFLAGS += -Wall -fexceptions CFLAGS += -I. CFLAGS += $(INCLUDES_FLAGS) CFLAGS += $(CORE_INCLUDE_FLAGS) CFLAGS += -x c++ -arch $(ARCH) -fmessage-length=0 -pipe -Wno-trigraphs -fpascal-strings -Os -fasm-blocks -Wno-deprecated-declarations -Wno-invalid-offsetof -gdwarf-2 -msse3 -mssse3 LIBS += $(LIB_SHARED) LIBS += $(LIB_STATIC) LDFLAGS = $(LIB_PATHS_FLAGS) -Wl LIBS += -F$(OF_ROOT)/libs/glut/lib/osx -framework AppKit -framework Cocoa -framework IOKit -framework AGL -framework AudioToolbox -framework Carbon -framework CoreAudio -CoreFoundation -framework CoreServices -framework GLUT -framework OpenGL -framework Quicktime -framework CoreMidi -framework QTKit -framework QuartzCore -framework CoreVideo -framework Accelerate #Targets ifeq ($(findstring Debug,$(MAKECMDGOALS)),Debug) TARGET_CFLAGS = -g TARGET_LIBS = $(OF_ROOT)/libs/openFrameworksCompiled/lib/osx/openFrameworksDebug.a TARGET_NAME = Debug endif ifeq ($(findstring Release,$(MAKECMDGOALS)),Release) TARGET_CFLAGS = $(COMPILER_OPTIMIZATION) TARGET_LIBS = $(OF_ROOT)/libs/openFrameworksCompiled/lib/osx/openFrameworks.a TARGET_NAME = Release endif ifeq ($(findstring Debug,$(MAKECMDGOALS)),Debug) BIN_NAME = $(APPNAME)_debug TARGET = bin/$(BIN_NAME) endif ifeq ($(findstring Release,$(MAKECMDGOALS)),Release) BIN_NAME = $(APPNAME) TARGET = bin/$(BIN_NAME) endif ifeq ($(findstring Release,$(MAKECMDGOALS)),clang) CXX = clang endif ifeq ($(MAKECMDGOALS),) TARGET_NAME = Release BIN_NAME = $(APPNAME) TARGET = bin/$(BIN_NAME) TARGET_LIBS = $(OF_ROOT)/libs/openFrameworksCompiled/lib/osx/openFrameworks.a endif ifeq ($(MAKECMDGOALS),clean) TARGET = bin/$(APPNAME)_debug bin/$(APPNAME) endif #Output OBJ_OUTPUT = obj/$(TARGET_NAME)/ CLEANTARGET = clean$(TARGET_NAME) OBJS = $(addprefix $(OBJ_OUTPUT), $(OBJFILES)) DEPFILES = $(patsubst %.o,%.d,$(OBJS)) ifeq ($(findstring addons.make,$(wildcard *.make)),addons.make) ADDONS = $(shell cat addons.make) ADDONS_REL_DIRS = $(addsuffix /src, $(ADDONS)) ADDONS_LIBS_REL_DIRS = $(addsuffix /libs, $(ADDONS)) ADDONS_DIRS = $(addprefix $(OF_ROOT)/addons/, $(ADDONS_REL_DIRS) ) ADDONS_LIBS_DIRS = $(addprefix $(OF_ROOT)/addons/, $(ADDONS_LIBS_REL_DIRS) ) ADDONS_BIN_LIBS_DIRS = $(addsuffix /*/lib/$(LIBSPATH), $(ADDONS_LIBS_DIRS) ) ADDONS_INCLUDES = $(ADDONS_DIRS) ADDONS_INCLUDES = $(ADDONS_LIBS_DIRS) ADDONS_INCLUDES += $(shell find $(ADDONS_DIRS) -type d 2> /dev/null) ADDONS_INCLUDES += $(shell find $(ADDONS_LIBS_DIRS) -type d 2> /dev/null) ADDONSCFLAGS = $(addprefix -I,$(ADDONS_INCLUDES)) ifeq ($(findstring libsorder.make,$(shell find $(ADDONS_BIN_LIBS_DIRS) -name libsorder.make 2> /dev/null)),libsorder.make) ADDONS_LIBS_W_ORDER = $(shell cat $(shell find $(ADDONS_BIN_LIBS_DIRS) -name libsorder.make 2> /dev/null)) SED_EXCLUDE_LIBS = $(addsuffix \|,$(ADDONS_LIBS_W_ORDER)) ADDONS_LIBS_STATICS = $(shell find $(ADDONS_BIN_LIBS_DIRS) -name *.a 2> /dev/null | grep -v '$(SED_EXCLUDE_LIBS)') else ADDONS_LIBS_STATICS = $(shell find $(ADDONS_BIN_LIBS_DIRS) -name *.a 2> /dev/null) endif ADDONS_LIBS_STATICS += $(addprefix -l, $(ADDONS_LIBS_W_ORDER)) ADDONS_LIBS_STATICS += $(addprefix -L, $(shell find $(ADDONS_BIN_LIBS_DIRS) -name libsorder.make 2> /dev/null | sed s/libsorder.make//g)) ADDONS_LIBS_SHARED = $(shell find $(ADDONS_BIN_LIBS_DIRS) -name *.so 2> /dev/null) ADDONSLIBS = $(ADDONS_LIBS_STATICS) ADDONSLIBS += $(ADDONS_LIBS_SHARED) ADDONS_SOURCES = $(shell find $(ADDONS_DIRS) -name "*.cpp" -or -name "*.c" 2> /dev/null) ADDONS_SOURCES += $(shell find $(ADDONS_LIBS_DIRS) -name "*.cpp" -or -name "*.c" -or -name "*.cc" 2>/dev/null) ADDONS_OBJFILES = $(subst $(OF_ROOT)/, ,$(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(ADDONS_SOURCES))))) ADDONS_OBJS = $(addprefix $(OBJ_OUTPUT), $(ADDONS_OBJFILES)) DEPFILES += $(patsubst %.o,%.d,$(ADDONS_OBJS)) endif .PHONY: Debug Release all after Release: $(TARGET) after Debug: $(TARGET) after all: $(MAKE) Release #This rule does the compilation #$(OBJS): $(SOURCES) $(OBJ_OUTPUT)%.o: %.cpp @echo "compiling object for: " $< mkdir -p $(@D) $(CXX) -c $(TARGET_CFLAGS) $(CFLAGS) $(ADDONSCFLAGS) $(USER_CFLAGS) -MMD -MP -MF$(OBJ_OUTPUT)$*.d -MT$(OBJ_OUTPUT)$*.d -o$@ -c $< $(OBJ_OUTPUT)%.o: %.c @echo "compiling object for: " $< mkdir -p $(@D) $(CXX) -c $(TARGET_CFLAGS) $(CFLAGS) $(ADDONSCFLAGS) $(USER_CFLAGS) -MMD -MP -MF$(OBJ_OUTPUT)$*.d -MT$(OBJ_OUTPUT)$*.d -o$@ -c $< $(OBJ_OUTPUT)%.o: $(OF_ROOT)/%.cpp @echo "compiling addon object for" $< mkdir -p $(@D) $(CXX) $(TARGET_CFLAGS) $(CFLAGS) $(ADDONSCFLAGS) $(USER_CFLAGS) -MMD -MP -MF$(OBJ_OUTPUT)$*.d -MT$(OBJ_OUTPUT)$*.d -o $@ -c $< $(OBJ_OUTPUT)%.o: $(OF_ROOT)/%.c @echo "compiling addon object for" $< mkdir -p $(@D) $(CXX) $(TARGET_CFLAGS) $(CFLAGS) $(ADDONSCFLAGS) $(USER_CFLAGS) -MMD -MP -MF$(OBJ_OUTPUT)$*.d -MT$(OBJ_OUTPUT)$*.d -o $@ -c $< $(TARGET): $(OBJS) $(ADDONS_OBJS) @echo "linking" $(TARGET) $(GTK) $(CXX) -arch $(ARCH) -v -o $@ $(OBJS) $(ADDONS_OBJS) $(USER_CFLAGS) $(LDFLAGS) $(USER_LDFLAGS) $(TARGET_LIBS) $(ADDONSLIBS) $(USER_LIBS) $(LIBS) -include $(DEPFILES) .PHONY: clean cleanDebug cleanRelease clean: rm -Rf obj rm -f -v $(TARGET) rm -Rf -v bin/libs $(CLEANTARGET): rm -Rf -v $(OBJ_OUTPUT) rm -f -v $(TARGET) after:$(TARGET) @echo Preparing MacOS .app #-rm -rf -v $(TARGET).app mkdir -p $(TARGET).app/Contents/Frameworks mkdir -p $(TARGET).app/Contents/MacOS cp -r $(OF_ROOT)/libs/glut/lib/osx/* $(TARGET).app/Contents/Frameworks/ cp -r $(OF_ROOT)/libs/fmodex/lib/osx/* $(TARGET).app/Contents/MacOS/ cp $(TARGET) $(TARGET).app/Contents/MacOS/ install_name_tool -change ./libfmodex.dylib @executable_path/libfmodex.dylib $(TARGET).app/Contents/MacOS/$(BIN_NAME) @echo @echo " compiling done" @echo " to launch the application" @echo @echo " open $(TARGET).app" @echo .PHONY: help help: @echo @echo openFrameworks universal makefile @echo @echo targets: @echo "make Debug: builds the application with debug symbols" @echo "make Release: builds the app with optimizations" @echo "make: = make Release" @echo "make all: = make Release" @echo "make CleanDebug: cleans the Debug target" @echo "make CleanRelease: cleans the Release target" @echo "make clean: cleans everything" @echo @echo this should work with any OF app, just copy any example @echo change the name of the folder and it should compile @echo "only .cpp support, don't use .c files" @echo it will look for files in any folder inside the application @echo folder except that in the EXCLUDE_FROM_SOURCE variable. @echo "it doesn't autodetect include paths yet" @echo "add the include paths editing the var USER_CFLAGS" @echo at the beginning of the makefile using the gcc syntax: @echo -Ipath @echo @echo to add addons to your application, edit the addons.make file @echo in this directory and add the names of the addons you want to @echo include @echo