1.MAKEFLAGS变量是make的内置变量。主要目的是从主make向子make传递选项。如果MAKEFLAGS += -rR则会屏蔽隐含规则和隐含变量。
2.Makefile中引用shell中的环境变量和引用文件中定义的变量的方法是一样的都是$(VAR)的方式。bash中引用变量的方法是$VAR或者${VAR},同时{}也表示大括号扩展,如echo b{ed,olt,ar},会打印echo bed bolt bar。{列表项,列表项,...}大括号扩展中的列表项用","号分割,并要注意","后不能有空格。bash中的()表示命令替换 $(command)用法和`command`相同。
3.tee命令式从标准输入读数据并显示在标准输出。
4.如何解释规则“%:: FORCE”?
此为双冒号规则。规则中的%匹配任何文件,当此文件没有生成规则时此规则就会被调用。用法参考
5.Makefile规则的命令中echo $(PATH)和echo $$PATH的区别。假设PATH的值为"/a/b/c",前者会先解析PATH变量然后把echo /a/b/c传给shell执行,即make会展开变量,后者则是把echo $PATH传给shell执行,即make会把$$替换为$。
6.如果只是想解析Makefile而不实际执行,则可用make -p命令。
7.规则的命令前加@取消回显。
8..PHONY: xxx声明的目标为伪目标,目的是只是为了执行一些操作。如果不声明为伪目标的话例如以下规则
clean:
rm *.o
此时如果存在文件clean的话就会导致此规则的命令不被执行。