annotate makefile @ 578:86601f76f47a carfac_cpp

seemingly mingw likes tabs for makefiles ...? + some restructure and automatic execution of unittests after build...
author Ulf.Hammarqvist@gmail.com
date Thu, 11 Oct 2012 19:37:10 +0000
parents e4285e69a73d
children 71e3794ececa
rev   line source
Ulf@503 1 # How to use:
Ulf@503 2 # Add your cpp code to the list in UNITS.
Ulf@503 3 #
Ulf@503 4 # Unit test:
Ulf@503 5 # If you want to add a test build target for that cpp file ONLY, please see
Ulf@503 6 # example "AGC_unittest". (no need to add explicit build rule)
Ulf@503 7 #
Ulf@503 8 # If you intend to test a class including instanciated members, you need to
Ulf@503 9 # make a explicit rule to link properly. See example "CARFAC_unittest".
Ulf@503 10
Ulf@578 11 # settings
Ulf@578 12 GTEST_DIR = ../../../googletest
Ulf@578 13 LIB_EXTENSION = .dll
Ulf@578 14 EXE_EXTENSION = .exe
Ulf@578 15 # end settings
Ulf@578 16
Ulf@503 17 SRC_HEADERDIR = include
Ulf@503 18 SRC_DIR = src
Ulf@503 19 SRC_TESTDIR = unittest
Ulf@503 20
Ulf@503 21 SRC_HEADERS = $(SRC_HEADERDIR)/*.h
Ulf@503 22
Ulf@503 23 CPPFLAGS += -I$(SRC_HEADERDIR) -I$(GTEST_DIR)/include
Ulf@503 24 CXXFLAGS += -g -Wall -Wextra -std=gnu++0x #IMPORTANT note gnu++0x
Ulf@503 25
Ulf@577 26 UNITS = CARFAC AGC CAR Ear IHC #Add build units here (without the .cpp)
Ulf@503 27 SRC_OBJ = $(addprefix $(SRC_DIR)/, $(addsuffix .o, $(UNITS)))
Ulf@503 28
Ulf@503 29 GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
Ulf@503 30 $(GTEST_DIR)/include/gtest/internal/*.h
Ulf@503 31
Ulf@503 32 GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)
Ulf@503 33
Ulf@578 34 all : libcarfac unittest
Ulf@578 35
Ulf@578 36 libcarfac : $(SRC_DIR)/CARFAC.o $(SRC_OBJ)
Ulf@578 37 $(CXX) -shared $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@.$(LIB_EXTENSION) -fPIC
Ulf@578 38
Ulf@578 39 example_program : libcarfac
Ulf@578 40 # likely some example executable that runs the whole thing...
Ulf@578 41
Ulf@578 42 unittest: CARFAC_unittest AGC_unittest
Ulf@578 43 $(foreach binary, $^, ./$(addsuffix $(EXE_EXTENSION), $(binary));)
Ulf@578 44
Ulf@578 45 CARFAC_unittest : $(SRC_TESTDIR)/CARFAC_unittest.o $(SRC_OBJ)
Ulf@503 46
Ulf@503 47 clean :
Ulf@578 48 rm -f *.o *.a src/*.o unittest/*.o *_unittest* *.dll *.exe
Ulf@503 49
Ulf@503 50 # pattern magic
Ulf@503 51 $(SRC_DIR)/%.o : %.cpp $(SRC_HEADERS) #normal source
Ulf@578 52 $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(.SOURCE)
Ulf@503 53
Ulf@503 54 $(SRC_TESTDIR)/%.o : %.cpp $(SRC_HEADERS) $(GTEST_HEADERS) # unittest
Ulf@578 55 $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(.SOURCE)
Ulf@503 56
Ulf@503 57 %_unittest : $(SRC_DIR)/%.o $(SRC_TESTDIR)/%_unittest.o gtest_main.a #unittest
Ulf@578 58 $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
Ulf@503 59 # end pattern magic
Ulf@503 60
Ulf@503 61 # gtest stuff
Ulf@503 62 gtest-all.o : $(GTEST_SRCS_)
Ulf@578 63 $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \
Ulf@578 64 $(GTEST_DIR)/src/gtest-all.cc
Ulf@503 65
Ulf@503 66 gtest_main.o : $(GTEST_SRCS_)
Ulf@578 67 $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \
Ulf@578 68 $(GTEST_DIR)/src/gtest_main.cc
Ulf@503 69
Ulf@503 70 gtest.a : gtest-all.o
Ulf@578 71 $(AR) $(ARFLAGS) $@ $^
Ulf@503 72
Ulf@503 73 gtest_main.a : gtest-all.o gtest_main.o
Ulf@578 74 $(AR) $(ARFLAGS) $@ $^
Ulf@503 75 # end gtest stuff