对比makefile二种写法:
第一种:
-include ./makefile.init
RM := rm -rf
CPP_SRCS += \
./GatePlayerMgr.cpp \
./GateSharememe.cpp \
./GlobleGate.cpp \
./NetClient.cpp \
./NetDBCache.cpp \
./NetGame.cpp \
./NetWeb.cpp \
./NetWorld.cpp \
./gateHead.cpp \
./MsgWaitConfig.cpp \
./main.cpp
OBJS += \
./GatePlayerMgr.o \
./GateSharememe.o \
./GlobleGate.o \
./NetClient.o \
./NetDBCache.o \
./NetGame.o \
./NetWeb.o \
./NetWorld.o \
./gateHead.o \
./MsgWaitConfig.o \
./main.o
CPP_DEPS += \
./GatePlayerMgr.d \
./GateSharememe.d \
./GlobleGate.d \
./NetClient.d \
./NetDBCache.d \
./NetGame.d \
./NetWeb.d \
./NetWorld.d \
./gateHead.d \
./MsgWaitConfig.d \
./main.d
%.o: ./%.cpp
g++ -D_GATE_SERVER_ -D__LINUX__ -I"/root/workspace/server_yufei/Server/Gate" -I/root/workspace/server_yufei/Server/thirdparty/lua -I"/root/workspace/server_yufei/Server/Common" -I/root/workspace/server_yufei/Server/thirdparty/protobuf-2.5.0/src -I/root/workspace/server_yufei/Server/thirdparty/jsoncpp-src-0.5.0 -I/root/workspace/server_yufei/Server/thirdparty/mysql/linux_64/include -I/root/workspace/server_yufei/Server/thirdparty/ExtraSocket -I/root/workspace/server_yufei/Server/Base/include -I/root/workspace/server_yufei/Server/Extralib -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
USER_OBJS :=
LIBS := -lBase -lCommon -lExtralib -lExtraSocket -lprotobuf -ljson_linux-gcc-4.4.7_libmt -lrt
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C++_DEPS)),)
-include $(C++_DEPS)
endif
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
ifneq ($(strip $(CC_DEPS)),)
-include $(CC_DEPS)
endif
ifneq ($(strip $(CPP_DEPS)),)
-include $(CPP_DEPS)
endif
ifneq ($(strip $(CXX_DEPS)),)
-include $(CXX_DEPS)
endif
ifneq ($(strip $(C_UPPER_DEPS)),)
-include $(C_UPPER_DEPS)
endif
endif
-include ./makefile.defs
all: Gate
Gate: $(OBJS) $(USER_OBJS)
g++ -L/root/workspace/libs/output_lib -L"/root/workspace/server_yufei/Server/Extralib/" -L"/root/workspace/server_yufei/Server/Base/" -L"/root/workspace/server_yufei/Server/Common/" -L/root/workspace/server_yufei/Server/thirdparty/jsoncpp-src-0.5.0/libs/linux-gcc-4.4.7 -L/root/workspace/server_yufei/Server/thirdparty/protobuf-2.5.0/lib_linux -L/root/workspace/server_yufei/Server/thirdparty/mysql/linux_64/lib -o"Gate" $(OBJS) $(USER_OBJS) $(LIBS)
$(MAKE) --no-print-directory post-build
clean:
-$(RM) $(OBJS)$(C++_DEPS)$(C_DEPS)$(CC_DEPS)$(CPP_DEPS)$(EXECUTABLES)$(CXX_DEPS)$(C_UPPER_DEPS) Gate
-
post-build:
-cp -u Gate ./././bin
-
.PHONY: all clean dependents
.SECONDARY: post-build
-include ./makefile.targets
第二种:
get_all_sources=$(shell find $(1) -name "*.$(2)")
CCSRC_FLIE=$(call get_all_sources,./,cc)
CPPSRC_FLIE=$(call get_all_sources,./,cpp)
TEMP_OBJ+=$(CCSRC_FLIE:.cc=.o)
TEMP_MD+=$(CCSRC_FLIE:.cc=.d)
TEMP_OBJ+=$(CPPSRC_FLIE:.cpp=.o)
TEMP_MD+=$(CPPSRC_FLIE:.cpp=.d)
INCLUDE=-I ./ \
-I ../../Server/Common \
-I ../../Server/Base/include \
-I ../../Server/Extralib \
-I ../../Server/thirdparty/lua \
-I ../../Server/thirdparty/protobuf-2.5.0/src \
-I ../../Server/thirdparty/jsoncpp-src-0.5.0 \
-I ../../Server/thirdparty/ExtraSocket \
-I ../../Server/thirdparty/mysql/linux_64/include
LIB_INCLUDE = -L../../Server/Common/ \
-L ../../Server/Base/ \
-L ../../Server/Extralib/ \
-L ../../Server/thirdparty/ExtraSocket \
-L ../../Server/thirdparty/lua \
-L ../../Server/thirdparty/jsoncpp-src-0.5.0/libs/linux-gcc-4.4.7 \
-L ../../Server/thirdparty/protobuf-2.5.0/lib_linux \
-L ../../Server/thirdparty/mysql/linux_64/lib
TEMP_LIB=./Gate
LIBS = -lBase -lCommon -lmysqlclient -lLuaEngine -lprotobuf -ljson_linux-gcc-4.4.7_libmt -lExtraSocket -lExtralib -lrt -lmysqlclient
all:$(TEMP_OBJ) $(TEMP_LIB)
$(TEMP_LIB):$(TEMP_OBJ)
@echo "$(TEMP_OBJ) > $(TEMP_LIB)"
g++ $(LIB_INCLUDE) -o $(TEMP_LIB) $(TEMP_OBJ) $(LIBS)
%.o:%.cc
@echo "$< > $@"
g++ -D__LINUX__ -D_GATE_SERVER_ $(INCLUDE) -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
%.o:%.cpp
@echo "$< > $@"
g++ -D__LINUX__ -D_GATE_SERVER_ $(INCLUDE) -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
clean:
@rm -vrf $(TEMP_LIB) \
$(TEMP_MD) \
$(TEMP_OBJ)