You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

134 lines
4.3 KiB

################################################################################
# Contents: makefile with dependency generation #
# 26.05.2015 #
#------------------------------------------------------------------------------#
# makefile for cpp/c bins and libs #
# autor Philipp Schoenberger #
# ph.schoenberger@googlemail.com #
################################################################################
LIBS = pthread boost_thread boost_system
TOP_DIR = $(PWD)
SRC_FOLDER = ./src
TEST_DIR = ./test
INCLUDE_DIR = -I . \
-I ./include
# comment this out if you want debug compile info
#Q=@
ifeq ($(MAKECMDGOALS),test)
GCOV := --coverage
CPPUTEST_HOME := $(TOP_DIR)/test/cpputest
INCLUDE_DIR += -I$(CPPUTEST_HOME)/include -I.
SUPRESS_WARNINGS := -Wno-write-strings
CFLAGS_TEST := -DUNIT_TEST $(GCOV) -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorMallocMacros.h
CXXFLAGS_TEST := -DUNIT_TEST -include $(CPPUTEST_HOME)/include/CppUTest/MemoryLeakDetectorNewMacros.h $(SUPRESS_WARNINGS)
APP_PREFIX := test_
LIBS += CppUTest pthread gcov dl
CPPUTEST_BUILD := $(CPPUTEST_HOME)/cpputest_build
LIBS_TEST = -L $(CPPUTEST_BUILD)/lib/
TEST_SRC_FOLDER = test
BUILD_DIR = $(PWD)/build/test
CPPUTEST_LIB = $(CPPUTEST_BUILD)/lib
# Sources
SRC_C := $(wildcard $(TEST_SRC_FOLDER)/*.c)
SRC_H := $(wildcard $(TEST_SRC_FOLDER)/*.h)
SRC_CPP := $(wildcard $(TEST_SRC_FOLDER)/*.cpp)
SRC_HPP := $(wildcard $(TEST_SRC_FOLDER)/*.hpp)
else
BUILD_DIR = $(TOP_DIR)/build/app
# Sources
SRC_C += $(wildcard $(SRC_FOLDER)/*.c)
SRC_CPP += $(wildcard $(SRC_FOLDER)/*.cpp)
endif
SRC_H += $(wildcard $(INCLUDE_DIR: % = %.h) $(SRC_FOLDER: % = %.h))
SRC_HPP += $(wildcard $(INCLUDE_DIR: % = %.hpp) $(SRC_FOLDER: % = %.hpp))
OUT_BINARY = $(APP_PREFIX)lwrserv
CC = g++
GLOBAL_FLAGS = -g -o2 -ansi -pedantic -DHAVE_SOCKLEN_T $(INCLUDE_DIR)
CFLAGS = $(GLOBAL_FLAGS) $(CFLAGS_TEST)
CXXFLAGS = $(GLOBAL_FLAGS) $(CFLAGS_TEST)
CPPFLAGS = $(GLOBAL_FLAGS) $(CFLAGS_TEST)
LDFLAGS = $(patsubst %,-l%,$(LIBS)) $(CFLAGS_TEST) $(LIBS_TEST)
# Objects
OBJS_C = $(patsubst %.c, $(BUILD_DIR)/%.o, $(SRC_C))
OBJS_CPP = $(patsubst %.cpp, $(BUILD_DIR)/%.o, $(SRC_CPP))
OBJS = $(patsubst %.o, %.o, $(OBJS_C) $(OBJS_CPP))
# Dependencies
DEPS_C = $(patsubst %.c, $(BUILD_DIR)/%.d, $(SRC_C))
DEPS_CPP = $(patsubst %.cpp, $(BUILD_DIR)/%.d, $(SRC_CPP))
DEPS_H = $(patsubst %.h, $(BUILD_DIR)/%.d, $(SRC_H))
DEPS_HPP = $(patsubst %.hpp, $(BUILD_DIR)/%.d, $(SRC_HPP))
#DEPS = $(OBJS: %.o = %.d)
DEPS += $(DEPS_H)
DEPS += $(DEPS_HPP)
DEPS += $(DEPS_C)
DEPS += $(DEPS_CPP)
#DEPS+=$(DEPS_H)
#DEPS+=$(DEPS_HPP)
.DEFAULT: all
.PHONY: all test CPPUTEST CPPUTEST_COMPILE clean doc
all: $(BUILD_DIR) $(BUILD_DIR)/$(OUT_BINARY)
doc:
doxygen $(TOP_DIR)/doc/doxygenconfig
test: CPPUTEST $(BUILD_DIR)/$(OUT_BINARY) $(TEST_DIR)
$(BUILD_DIR)/$(OUT_BINARY) -v
CPPUTEST: $(CPPUTEST_HOME) $(CPPUTEST_LIB)
$(CPPUTEST_LIB): CPPUTEST_COMPILE
CPPUTEST_COMPILE:
mkdir $(CPPUTEST_BUILD) -p
cd $(CPPUTEST_BUILD) && autoreconf .. -i
cd $(CPPUTEST_BUILD) && ../configure
cd $(CPPUTEST_BUILD) && $(MAKE)
$(BUILD_DIR) $(TEST_DIR):
echo $(SRC_C)
echo $(DEPS)
$(Q)echo " [mk] $@"
$(Q)mkdir -p $@/src $@/test $@/include
clean:
$(Q)echo " [rm] $(BUILD_DIR)"
$(Q)rm -rf $(BUILD_DIR)
$(BUILD_DIR)/$(OUT_BINARY): $(BUILD_DIR) $(DEPS) $(DEP_LIBS) $(OBJS)
$(Q)echo " [ld] $@"
$(Q)( $(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) -o $@ ) || exit 1
$(BUILD_DIR)/%.o : %.c $(BUILD_DIR) $(TEST_DIR)
$(Q)echo " [CC] $@"
$(Q)( $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ ) || exit 1
$(BUILD_DIR)/%.o : %.cpp $(BUILD_DIR) $(TEST_DIR)
$(Q)echo " [CXX] $@"
$(Q)( $(CXX) -c $(CXXFLAGS) $(CPPFLAGS) $< -o $@ ) || exit 1
$(BUILD_DIR)/%.d: $(BUILD_DIR) $(TEST_DIR) %.c
$(Q)echo " [DEP] $@"
$(Q)touch $@
$(Q)echo -n "$@ $(patsubst %.d,%.o,$@):" >$@
$(Q)$(CC) -M $(CFLAGS) $(filter %.cpp,$^ ) | sed 's:$*.o\:::' >> $@
$(BUILD_DIR)/%.d: $(BUILD_DIR) $(TEST_DIR) %.cpp
$(Q)echo " [DEP] $@"
$(Q)touch $@
$(Q)$(CC) -M $(filter-out -g -o0 -o1 -o2 ,$(CPPFLAGS)) $(filter %.cpp,$^) >> $@
#$(Q)echo -n "$@ $(patsubst %.d,%.o,$@): " >$@
#-include $(DEPS)