Makefile使用中的陷阱与问题解析
1. 变量定义与扩展
在Makefile中,变量的定义方式会影响其扩展次数和性能。如果使用:=定义变量,如定义CWD,可以通过$(warning)技巧验证CWD仅被扩展一次。示例如下:
$ make makefile:1: Call to shell Make /somedir/obj/foo.o from /somedir/src/foo.c Make /somedir/obj/bar.o from /somedir/src/bar.c Make /somedir/obj/baz.o from /somedir/src/baz.c /somedir/obj/foo.o /somedir/obj/bar.o /somedir/obj/baz.o /somedir/obj/foo.o /somedir/obj/bar.o /somedir/obj/baz.o要快速判断Makefile是否使用了代价高昂的=和$(shell)组合,可以运行以下命令:
grep -n \$\(shell makefile | grep -v :=该命令会打印出Makefile中包含$(shell)且不包含:= <