.PHONY : all test doc prepare clean purge install uninstall style check SRC_DIR = src OBJ_DIR = obj 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 RM_RECURSIVE_VERBOSE = rm -frv CP = cp -v MKDIR = mkdir -pv # Other tools STYLE = astyle --style=gnu --formatted CPPCHECK = cppcheck --enable=all DOXYGEN = doxygen >/dev/null # Compilation tools and flags GXX = g++-4.4 #DEBUG = -g TESTSGXXFLAGS = -I$(TESTS_DIR) -I$(SRC_DIR) -I. GXXFLAGS = $(DEBUG) -Wall -Wextra LD = $(GXX) LDFLAGS = -lm -lrt -lboost_program_options # Targets TARGET = owlps-positioning OBJ_TARGET = $(OBJ_DIR)/$(TARGET).o SOURCE_TARGET = $(SRC_DIR)/$(TARGET).cc OBJ_LIST = \ 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 \ result.o \ realposition.o \ configuration.o \ userinterface.o \ output.o \ outputterminal.o \ outputcsv.o \ positioning.o \ input.o \ inputcsv.o \ inputlogcsv.o OBJ_NOTEST_LIST = \ posexcept.o \ outputfilemedium.o \ inputmedium.o INTERFACES_LIST = \ inputlogmedium.hh \ outputmedium.hh \ positioningalgorithm.hh OBJ = $(OBJ_LIST:%=$(OBJ_DIR)/%) OBJ_NOTEST = $(OBJ_NOTEST_LIST:%=$(OBJ_DIR)/%) INTERFACES = $(INTERFACES_LIST:%=$(SRC_DIR)/%) SOURCE = \ $(OBJ:$(OBJ_DIR)/%.o=$(SRC_DIR)/%.hh) \ $(OBJ:$(OBJ_DIR)/%.o=$(SRC_DIR)/%.cc) \ $(OBJ_NOTEST:$(OBJ_DIR)/%.o=$(SRC_DIR)/%.hh) \ $(OBJ_NOTEST:$(OBJ_DIR)/%.o=$(SRC_DIR)/%.cc) \ $(INTERFACES) 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:$(OBJ_DIR)/%.o=$(TESTS_DIR)/%_test.hh) OBJ_TESTS = $(TESTUTIL_OBJ) $(TESTSETUP_OBJ) INCLUDES_TESTS = $(TESTS_DIR)/valuetraits.hh all: prepare $(TARGET) # Generic targets $(TESTS_DIR)/%.o: $(TESTS_DIR)/%.cc $(TESTS_DIR)/%.hh $(GXX) $(GXXFLAGS) $(TESTSGXXFLAGS) -o $@ -c $< $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cc $(SRC_DIR)/%.hh $(GXX) $(GXXFLAGS) -o $@ -c $< %: $(OBJ_DIR)/%.o $(LD) $(LDFLAGS) -o $@ $^ # Dependencies userinterface.o: \ $(OBJ_DIR)/configuration.o referencepoint.o: \ $(OBJ_DIR)/point3d.o waypoint.o: \ $(OBJ_DIR)/point3d.o \ $(OBJ_DIR)/building.o area.o: \ $(OBJ_DIR)/building.o \ $(OBJ_DIR)/point3d.o wifidevice.o: \ $(OBJ_DIR)/posutil.o accesspoint.o: \ $(OBJ_DIR)/wifidevice.o \ $(OBJ_DIR)/point3d.o mobile.o: \ $(OBJ_DIR)/wifidevice.o measurement.o: \ $(OBJ_DIR)/accesspoint.o request.o: \ $(OBJ_DIR)/timestamp.o \ $(OBJ_DIR)/measurement.o calibrationrequest.o: \ $(OBJ_DIR)/request.o \ $(OBJ_DIR)/referencepoint.o \ $(OBJ_DIR)/direction.o outputfilemedium.o: \ $(OBJ_DIR)/posexcept.o inputcsv.o: \ $(OBJ_DIR)/inputmedium.o \ $(OBJ_DIR)/request.o \ $(OBJ_DIR)/calibrationrequest.o \ $(OBJ_DIR)/stock.o inputlogcsv.o: \ $(SRC_DIR)/inputlogmedium.hh \ $(OBJ_DIR)/request.o input.o: \ $(OBJ_DIR)/inputcsv.o \ $(OBJ_DIR)/inputlogcsv.o \ $(OBJ_DIR)/calibrationrequest.o \ $(OBJ_DIR)/configuration.o \ $(OBJ_DIR)/posexcept.o \ $(OBJ_DIR)/stock.o outputterminal.o: \ $(SRC_DIR)/outputmedium.hh \ $(OBJ_DIR)/result.o outputcsv.o: \ $(SRC_DIR)/outputmedium.hh \ $(OBJ_DIR)/outputfilemedium.o \ $(OBJ_DIR)/result.o output.o: \ $(OBJ_DIR)/outputterminal.o \ $(OBJ_DIR)/configuration.o \ $(OBJ_DIR)/posexcept.o realposition.o: \ $(SRC_DIR)/positioningalgorithm.hh \ $(OBJ_DIR)/result.o \ $(OBJ_DIR)/calibrationrequest.o \ $(OBJ_DIR)/referencepoint.o positioning.o: \ $(OBJ_DIR)/input.o \ $(OBJ_DIR)/realposition.o \ $(OBJ_DIR)/output.o \ $(OBJ_DIR)/configuration.o \ $(OBJ_DIR)/posexcept.o # Specific targets $(TARGET): $(OBJ) $(OBJ_NOTEST) $(OBJ_TARGET) $(OBJ_TARGET): $(SOURCE_TARGET) $(GXX) $(GXXFLAGS) -o $@ -c $< $(TESTS_XX): $(SOURCE_TESTS) $(OBJ) $(TESTS_DIR)/cxxtestgen.pl --error-printer \ --include=$(TESTS_DIR)/valuetraits.hh \ --include=$(TESTUTIL_OBJ:.o=.hh) \ -o $@ $(SOURCE_TESTS) $(TESTS_OBJ): $(TESTS_XX) $(INCLUDES_TESTS) $(GXX) $(GXXFLAGS) $(TESTSGXXFLAGS) -o $@ -c $< $(TESTS_TARGET): $(TESTS_OBJ) $(OBJ_TESTS) $(OBJ) $(OBJ_NOTEST) $(LD) $(LDFLAGS) -o $@ $^ test: prepare $(TESTS_TARGET) @$(TESTS_TARGET) doc: @$(DOXYGEN) $(DOXYFILE) prepare: @$(MKDIR) $(OBJ_DIR) clean: @$(RM) *~ */*~ *.orig */*.orig @$(RM_RECURSIVE_VERBOSE) $(OBJ_DIR) @$(RM) $(TESTS_XX) $(TESTS_DIR)/*.o 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) \ $(SOURCE) \ $(TESTS_DIR)/*.hh \ $(TESTS_DIR)/*.cc check: @$(CPPCHECK) \ $(SOURCE) \ $(TARGET).cc