############################################## CSRCS := $(patsubst %.c,$(SRCDIR)/%.c,$(filter %.c,$(SRCS))) CPPSRCS := $(patsubst %.cpp,$(SRCDIR)/%.cpp,$(filter %.cpp,$(SRCS))) COBJS := $(patsubst %.c,$(OBJPATH)/%.o,$(filter %.c,$(SRCS))) CPPOBJS := $(patsubst %.cpp,$(OBJPATH)/%.opp,$(filter %.cpp,$(SRCS))) ############################################## # default target _build_: $(TARGET) $(CSRCS) $(CPPSRCS): $(patsubst %,$(SRCDIR)/%,$(HDRS)) touch $@ # Attention: $@ doesn't work for paths with spaces.... $(OBJPATH): -mkdir -p $(OBJPATH) # Attention: $@ doesn't work for paths with spaces.... $(TARGETPATH): -mkdir -p $(TARGETPATH) ##### precompiled header file ################### ifdef PRECOMPILE PRECOMSRC := $(SRCDIR)/$(PRECOMPILE) else PRECOMSRC := $(FLEXTINC)/flext.h endif ifdef PRECOMSRC PRECOMDST := $(OBJPATH)/$(notdir $(PRECOMSRC)).gch PRECOMINC := -I $(OBJPATH) endif $(PRECOMDST) : $(PRECOMSRC) $(patsubst %,$(SRCDIR)/%,$(HDRS)) -mkdir -p $(dir $@) $(CXX) -c $(DEFS) $(INCPATH) $(PRECOMSRC) -o $@ ##### architecture-specific compilation ################### define ARCH_COMPILE $(OBJPATH)/%.opp_$(1) : $(SRCDIR)/%.cpp -mkdir -p $(dir $$@) $(CXX) -c $(CFLAGS) -arch $(1) $$(CFLAGS_$(1)) $(DEFS) $(PRECOMINC) $(INCPATH) $$^ -o $$@ $(OBJPATH)/%.o_$(1) : $(SRCDIR)/%.c -mkdir -p $(dir $$@) $(CC) -c $(CFLAGS) -arch $(1) $$(CFLAGS_$(1)) $(DEFS) $(INCPATH) $$^ -o $$@ endef # implement for all archs in ARCH $(foreach arch,$(ARCH),$(eval $(call ARCH_COMPILE,$(arch)))) ##### make fat object file ################### $(OBJPATH)/%.opp : $(foreach arch,$(ARCH),$(OBJPATH)/%.opp_$(arch)) lipo $^ -create -output $@ $(OBJPATH)/%.o : $(foreach arch,$(ARCH),$(OBJPATH)/%.o_$(arch)) lipo $^ -create -output $@ ############################################## _clean_: -rm -r $(TARGETPATH) -rm -r $(OBJPATH) ##############################################