makefile 调试分析方法
字符串输出,可以加在任何地方,让你定位makefile运行位置。使用方法是在任何地方加入$(warning xxx xxx xxx ), make执行时就会执行到改行的时候打印出来xxx xxx xxx
注意echo只能在target:后面的语句使用且前面要有个TAB,使用方法如下
clean 这个目标不依赖于任何东西,因为冒号后面啥都没有写。 所以处理这个target的时候,只管执行关联动作rm -rf就好了。那么 (LIBSRCS:%.cpp=%.o) 这个好猜就是把LIBSRCS中所有的.cpp列表中的名字保持不变,把后缀修改为.o就变成了LIBOBJS的列表。至于LIBSRCS要把是一个个源文件指定,要吗用通配符指定。 LIBSRCS = (SRCDIR)/ .c (SRCDIR)/ .cpp` 简单的理解就是wildcard把通配符匹配的文件路径都列了出来以方便加入LIBSRCS
例子2 比如推导 make all
首先找all目标看是否要依赖啥
all:lib testExe
需要递归找lib和testExe分别的依赖
lib: $(LIBOBJS)
我们知道$LIBOBJS是一堆.o文件的列表,那么每个.o文件作为目标他们的依赖是啥需要继续推导
.cpp.o:是maikefile的简洁写法,也就是.o文件依赖于同名的.cpp文件,编译规则是 g++ -g $(INC) -c $< -o $@ 意思是如果没有某个.o文件就用这个规则通过同名的cpp文件生成一个。 <表示第一个依赖文件xxx.cpp。 $@表示目标文件xxx.o