################################################################################ # Contents: makefile with dependency generation # # 26.05.2015 # #------------------------------------------------------------------------------# # makefile for cpp/c bins and libs # # autor Philipp Schoenberger # # ph.schoenberger@googlemail.com # ################################################################################ LIBS = pthread OUT_BINARY = lwrserv CC = g++ GLOBAL_FLAGS = -g -o2 -ansi -pedantic -DHAVE_SOCKLEN_T CFLAGS = $(GLOBAL_FLAGS) CXXFLAGS = $(GLOBAL_FLAGS) CPPFLAGS = $(GLOBAL_FLAGS) LDFLAGS = $(patsubst %,-l%,$(LIBS)) BUILD_DIR = build # Sources SRC_C := $(wildcard *.c) SRC_H := $(wildcard *.h) SRC_CPP := $(wildcard *.cpp) SRC_HPP := $(wildcard *.hpp) #SRC_CXX := $(wildcard *.cxx) #SRC_CC := $(wildcard *.C) # 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_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) .DEFAULT: all Q=@ all: $(BUILD_DIR) $(BUILD_DIR)/$(OUT_BINARY) $(BUILD_DIR): $(Q)echo " [mk] $(BUILD_DIR)" $(Q)mkdir -p $(BUILD_DIR) 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) $(Q)echo " [CC] $@" $(Q)( $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ ) || exit 1 $(BUILD_DIR)/%.o : %.cpp $(BUILD_DIR) $(Q)echo " [CXX] $@" $(Q)( $(CXX) -c $(CXXFLAGS) $(CPPFLAGS) $< -o $@ ) || exit 1 $(BUILD_DIR)/%.d: $(BUILD_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) %.cpp $(Q)echo " [DEP] $@" $(Q)touch $@ $(Q)echo -n "$@ $(patsubst %.d,%.o,$@):" >$@ $(Q)$(CC) -M $(filter-out -g -o0 -o1 -o2 ,$(CPPFLAGS)) $(filter %.cpp,$^) | sed 's:$*.o\:::' >> $@ -include $(DEPS)