###################################################################### # Makefile.txt # # Output path : LIB_DIR (copy of library is stored here) # Include path : INC_DIR (additional search path for headers) # # I N S T R U C T I O N S : # # The following actions can always be done: # # - set or modify globally defined variables # - delete object files in current catalog # - list current settings # # If no settings or file names are changed: # # - make -f Makefile.txt => run makefile and create library # - make -s -f Makefile.txt => as above but no echo # - make -q -f Makefile.txt => don't execute commands # # If settings or filenames are changed: # # - Add/remove/change list of required files in SRC_CPP # - Remove old list of dependecies (last section in this file) # - Run 'make -depend -f Makefile.txt', to generate a list # of dependencies (appended at the end of this file) # - Ensure that dependecies are added correctly # - Run 'make -f Makefile.txt' to build the library # # Additional options: # # - make echo -f Makefile.txt => list utilized settings# # - make clean -f Makefile.txt => delete all object files # ###################################################################### # Start by reading common settings from config file. # A list of defined variables is given below. Note that, # the user may override these settings once they are set. # # MAKEFLAGS, CP, CC, AR, RANLIB, STRIP # RM, DEFINES, CFLAGS, OPTFLAG, INC_DIR, LIB_DIR # include ../../../../../../global_make_variables.txt # All make files will store a copy of the generated archive (library) # file in this catalog. These files can then be used for deliveries # or for building test projects based on GIPS components # LIB_DIR = ../../../../../../build/libraries/ #====================================================== # user must define/modify variables in this section ... #====================================================== # Include directories. # INC_DIR = \ ../../interface \ ../../../../interface \ ../../../../../../GIPSStandardUtility/main/interface \ ../../../../../../splib/main/interface \ ../../../../../../tools/gtest/interface # Output executable name. # PROG_NAME = apm_unit_test # Relative path for the test binary # BIN_DIR = ./ BUILD_DIR = build # define input C source files (.cpp) # SRC_CPP = \ unit_test.cpp LIB_NAME = APM #============================================ # ... end of user input section #============================================ # ------------------------------- # derive internal/local variables # ------------------------------- out_name = $(addprefix $(BIN_DIR),$(PROG_NAME)) lib_name = $(addsuffix $(FNAME_EXT),$(LIB_NAME)) defines = $(addprefix -D,$(DEFINES)) includes = $(addprefix -I,$(INC_DIR)) cflags = $(CFLAGS) $(OPTFLAG) $(defines) $(includes) lflags = $(LFLAGS) $(OPTFLAG) obj_cpp := $(SRC_CPP:%.cpp=$(BUILD_DIR)/%.o) dep_cpp := $(SRC_CPP:%.cpp=$(BUILD_DIR)/%.d) ifeq (${TARGET},MAC) libs := -lm endif ifeq (${TARGET},MAC_INTEL) libs := -lm endif ifeq (${TARGET},LINUX) libs := -lm -lrt -lpthread endif all: build build: $(out_name) # ----------------------- # pattern rules # ----------------------- $(BUILD_DIR)/%.o: %.cpp $(CCPP) $(cflags) $< -o $@ $(out_name): $(obj_cpp) $(obj_c) $(LIB_DIR)$(lib_name) $(LIB_DIR)$(GTEST_LIB_NAME) $(CCPP) $(lflags) $(obj_cpp) $(obj_c) $(LIB_DIR)$(lib_name) $(LIB_DIR)$(GTEST_LIB_NAME) $(libs) -o $(out_name) # Creates dependency files $(BUILD_DIR)/%.d: %.cpp @mkdir -p $(BUILD_DIR) @$(CCPP) -w -MM $(cflags) $< > $@ @mv -f $@ $@.tmp @sed -e 's|.*:|$(BUILD_DIR)/$*.o:|' < $@.tmp > $@ @sed -e 's/.*://' -e 's/\\$$//' < $@.tmp | fmt -1 | \ sed -e 's/^ *//' -e 's/$$/:/' >> $@ @rm -f $@.tmp ifneq ($(MAKECMDGOALS), clean) -include $(dep_cpp) endif # ---------------------- # selectable PHONY rules # ---------------------- .PHONY: echo echo: @echo @echo '>>' Output library: $(lib_name) @echo '>>' Copy of library is stored at: $(LIB_DIR) @echo '>>' Additional include directory: $(INC_DIR) @echo @echo '>>' Preprocessor defines: $(DEFINES) @echo '>>' Optimization flag: $(OPTFLAG) @echo @echo '>>' Current working directory: $(CURDIR) @echo '>>' Utilized make flags: $(MAKEFLAGS) @echo @echo '>>' Compiler command: $(CCPP) $(cflags) @echo '>>' Archive command: $(AR) @echo @echo '>>' Included '.cpp' source files: $(SRC_CPP) @echo '>>' Included '.c' source files: $(SRC_C) @echo @echo '>>' Generated object files: $(obj_cpp) $(obj_c) .PHONY: clean clean: @echo $(obj_cpp) $(obj_c) $(dep_cpp) $(dep_c) @$(RM) $(obj_cpp) $(obj_c) $(dep_cpp) $(dep_c) @echo $(lib_name) @$(RM) $(lib_name) @echo all object files are now removed