.PHONY : all test doc clean purge install uninstall style check TESTS_DIR = tests DOXYGEN_DIR = doc DOXYFILE = Doxyfile # Installation directory PREFIX = /usr/local INSTALL_DIR = $(PREFIX)/bin # System tools RM = rm -fv RM_RECURSIVE = \rm -fr CP = cp -v # Other tools STYLE = astyle --style=gnu --formatted CPPCHECK = cppcheck --enable=all DOXYGEN = doxygen # Compilation tools and flags GXX = g++-4.4 #DEBUG = -g TESTSGXXFLAGS = -I$(TESTS_DIR) -I. GXXFLAGS = $(DEBUG) -Wall -Wextra LD = $(GXX) LDFLAGS = -lm -lrt -lboost_program_options # Targets TARGET = owlps-positioning OBJ = posutil.o \ stock.o \ timestamp.o \ direction.o \ point3d.o \ referencepoint.o \ waypoint.o \ building.o \ area.o \ wifidevice.o \ accesspoint.o \ mobile.o \ measurement.o \ request.o \ calibrationrequest.o \ configuration.o \ userinterface.o \ input.o \ inputcsv.o \ inputlogcsv.o OBJ_NOTEST = posexcept.o \ inputmedium.o INTERFACES = inputlogmedium.hh TESTS_XX = $(TESTS_DIR)/tests.cc TESTS_OBJ = $(TESTS_DIR)/tests.o TESTS_TARGET = $(TESTS_DIR)/tests TESTUTIL_OBJ = $(TESTS_DIR)/testutil.o TESTSETUP_OBJ = $(TESTS_DIR)/testsetup.o SOURCE_TESTS = $(OBJ:%.o=$(TESTS_DIR)/%_test.hh) OBJ_TESTS = $(TESTUTIL_OBJ) $(TESTSETUP_OBJ) INCLUDES_TESTS = $(TESTS_DIR)/valuetraits.hh all: $(TARGET) # Generic targets $(TESTS_DIR)/%.o: $(TESTS_DIR)/%.cc $(TESTS_DIR)/%.hh $(GXX) $(GXXFLAGS) $(TESTSGXXFLAGS) -o $@ -c $< %.o: %.cc %.hh $(GXX) $(GXXFLAGS) -c $< %: %.o $(LD) $(LDFLAGS) -o $@ $^ # Dependencies userinterface.o: configuration.o referencepoint.o: point3d.o waypoint.o: point3d.o building.o area.o: building.o point3d.o wifidevice.o: posutil.o accesspoint.o: wifidevice.o point3d.o mobile.o: wifidevice.o measurement.o: accesspoint.o request.o: timestamp.o measurement.o calibrationrequest.o: request.o referencepoint.o direction.o inputcsv.o: inputmedium.o request.o stock.o inputlogcsv.o: inputlogmedium.hh request.o input.o: posexcept.o # Specific targets $(TARGET): $(OBJ) $(OBJ_NOTEST) $(TESTS_XX): $(SOURCE_TESTS) $(TESTS_DIR)/cxxtestgen.pl --error-printer \ --include=$(TESTS_DIR)/valuetraits.hh \ --include=$(TESTUTIL_OBJ:.o=.hh) \ -o $@ $^ $(TESTS_OBJ): $(TESTS_XX) $(INCLUDES_TESTS) $(GXX) $(GXXFLAGS) $(TESTSGXXFLAGS) -o $@ -c $< $(TESTS_TARGET): $(TESTS_OBJ) $(OBJ_TESTS) $(OBJ) $(OBJ_NOTEST) $(LD) $(LDFLAGS) -o $@ $^ test: $(TESTS_TARGET) @$(TESTS_TARGET) doc: @$(DOXYGEN) $(DOXYFILE) clean: @$(RM) *~ *.o *.gch *.orig @$(RM) $(TESTS_XX) $(TESTS_DIR)/*~ $(TESTS_DIR)/*.o \ $(TESTS_DIR)/*.orig purge: clean @$(RM) $(TARGET) @$(RM) $(TESTS_TARGET) @$(RM_RECURSIVE) $(DOXYGEN_DIR) install: $(TARGET) @$(CP) $(TARGET) $(INSTALL_DIR) && \ chmod 755 $(INSTALL_DIR)/$(TARGET) && \ chown root:root $(INSTALL_DIR)/$(TARGET) uninstall: @$(RM) $(INSTALL_DIR)/$(TARGET) style: @$(STYLE) \ $(OBJ:.o=.hh) \ $(OBJ:.o=.cc) \ $(OBJ_NOTEST:.o=.hh) \ $(OBJ_NOTEST:.o=.cc) \ $(INTERFACES) \ $(TESTS_DIR)/*.hh \ $(TESTS_DIR)/*.cc check: @$(CPPCHECK) \ $(OBJ:.o=.hh) $(OBJ:.o=.cc) \ $(OBJ_NOTEST:.o=.hh) $(OBJ_NOTEST:.o=.cc) \ $(INTERFACES) $(TARGET).cc