owlps/owlps-positioning/Makefile

145 lines
3.0 KiB
Makefile

.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