makefile自动增量编译技术

#makefile
################################################################################################
#用wildcard通配符指定当前路径下的所有以.cpp结尾的文件名
CXX_CPP := $(wildcard *.cpp)
#把所有以.cpp结尾的文件名转换为.o结尾的文件名,编译.o文件用
CXX_OBJ := $(CXX_CPP:.cpp=.o)
#把所有以.cpp结尾的文件名转换为.d结尾的文件名,编译.d文件用
CXX_DEP := $(CXX_CPP:.cpp=.d)
#把所有以.cpp结尾的文件名转换为.o结尾的文件名,链接用
LINK_OBJ := $(CXX_CPP:.cpp=.o)
#使用g++编译器
CC = g++
#用strip来裁减编译出来的程序,减少程序大小
STRIP = strip
#编译标志
#不要用编译优化,以免产生莫名奇妙的问题
CFLAG = #-O2
#指定链接库
LIBS := -lpthread -lm
################################################################################################
#从all开始执行,依次执行${CXX_DEP} ${CXX_OBJ} main这个步骤
all:${CXX_DEP} ${CXX_OBJ} main
#编译.cpp文件的依赖头文件信息, 并放入.d文件里
${CXX_DEP}:%.d:%.cpp
${CC} ${CFLAG} -MM $< -o $@ \
#编译.cpp文件,并生成.o文件
${CXX_OBJ}:%.o:%.cpp
${CC} ${CFLAG} -c $< -o $@ \
#把.o文件链接成可执行程序
main: ${LINK_OBJ}
${CC} -static ${CFLAG} -o $@ $(LINK_OBJ) ${LIBS} \
#裁减可执行程序
${STRIP} $@
#把.d文件的文件依赖信息包含进来,自动增量编译的重要步骤
-include $(CXX_DEP)
#运行可执行程序
run:main
./main
################################################################################################
##
#清除操作
.PHONY: clean
clean:
rm -f *.d
rm -f *.o
rm -f main

 

你可能感兴趣的:(linux)