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
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)
|