Ulf@564: # How to use: Ulf@564: # Add your cpp code to the list in UNITS. Ulf@564: # Ulf@564: # Unit test: Ulf@564: # If you want to add a test build target for that cpp file ONLY, please see Ulf@564: # example "AGC_unittest". (no need to add explicit build rule) Ulf@564: # Ulf@564: # If you intend to test a class including instanciated members, you need to Ulf@564: # make a explicit rule to link properly. See example "CARFAC_unittest". Ulf@564: Ulf@585: # settings Ulf@585: GTEST_DIR = ../../../googletest Ulf@585: LIB_EXTENSION = .dll Ulf@585: EXE_EXTENSION = .exe Ulf@585: # end settings Ulf@585: Ulf@564: SRC_HEADERDIR = include Ulf@564: SRC_DIR = src Ulf@564: SRC_TESTDIR = unittest Ulf@564: Ulf@564: SRC_HEADERS = $(SRC_HEADERDIR)/*.h Ulf@564: Ulf@564: CPPFLAGS += -I$(SRC_HEADERDIR) -I$(GTEST_DIR)/include Ulf@564: CXXFLAGS += -g -Wall -Wextra -std=gnu++0x #IMPORTANT note gnu++0x Ulf@564: Ulf@587: UNITS = CARFAC AGC CAR Ear IHC unit_conversion #Add build units here (without the .cpp) Ulf@564: SRC_OBJ = $(addprefix $(SRC_DIR)/, $(addsuffix .o, $(UNITS))) Ulf@564: Ulf@564: GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \ Ulf@564: $(GTEST_DIR)/include/gtest/internal/*.h Ulf@564: Ulf@564: GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS) Ulf@564: Ulf@585: all : libcarfac unittest Ulf@585: Ulf@585: libcarfac : $(SRC_DIR)/CARFAC.o $(SRC_OBJ) Ulf@586: $(CXX) -shared $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@$(LIB_EXTENSION) -fPIC Ulf@585: Ulf@585: example_program : libcarfac Ulf@585: # likely some example executable that runs the whole thing... Ulf@585: Ulf@587: unittest: $(foreach unit, $(UNITS), $(addsuffix _unittest, $(unit))) Ulf@585: $(foreach binary, $^, ./$(addsuffix $(EXE_EXTENSION), $(binary));) Ulf@585: Ulf@587: CARFAC_unittest : $(SRC_OBJ) Ulf@587: CAR_unittest : $(SRC_OBJ) #$(SRC_DIR)/unit_conversion.o Ulf@587: Ear_unittest : $(SRC_OBJ) Ulf@564: Ulf@588: cleanup : Ulf@588: rm -f *.o *.a src/*.o unittest/*.o Ulf@588: Ulf@588: clean : cleanup Ulf@588: rm -f *.dll *.exe Ulf@564: Ulf@564: # pattern magic Ulf@564: $(SRC_DIR)/%.o : %.cpp $(SRC_HEADERS) #normal source Ulf@585: $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(.SOURCE) Ulf@564: Ulf@564: $(SRC_TESTDIR)/%.o : %.cpp $(SRC_HEADERS) $(GTEST_HEADERS) # unittest Ulf@585: $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(.SOURCE) Ulf@564: Ulf@564: %_unittest : $(SRC_DIR)/%.o $(SRC_TESTDIR)/%_unittest.o gtest_main.a #unittest Ulf@585: $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ Ulf@564: # end pattern magic Ulf@564: Ulf@564: # gtest stuff Ulf@564: gtest-all.o : $(GTEST_SRCS_) Ulf@585: $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ Ulf@585: $(GTEST_DIR)/src/gtest-all.cc Ulf@564: Ulf@564: gtest_main.o : $(GTEST_SRCS_) Ulf@585: $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ Ulf@585: $(GTEST_DIR)/src/gtest_main.cc Ulf@564: Ulf@564: gtest.a : gtest-all.o Ulf@585: $(AR) $(ARFLAGS) $@ $^ Ulf@564: Ulf@564: gtest_main.a : gtest-all.o gtest_main.o Ulf@585: $(AR) $(ARFLAGS) $@ $^ Ulf@564: # end gtest stuff