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