当我执行Make时,我想知道执行了哪些Shell命令/配方(也许是Makefile在哪一行调用了这些命令/配方)。有没有一种方法(打印到标准输出或写入文件)而不修改Makefile?
答案 0 :(得分:0)
默认情况下,这些命令将回显到stdout,除非您通过在其前面加上@
来禁用它们。
您可以传递的一些选择:
-n
:回显将要运行的命令,但不运行它们。这还将回显以@
为前缀的命令。-d
:打印调试输出。这将输出尝试查找与尝试创建的目标匹配的规则所经历的过程。这里将有很多无用的信息,因为它将尝试许多默认的构建规则(例如如何从.c构建.o文件)。
有几种减少噪音的方法:
-r
:禁用隐式规则。如果您不依赖任何默认规则,则可以将它与-d结合使用,以仅打印您(主要)关心的部分--debug=b
:基本调试模式。打印它要制作的内容,但不打印有关隐式规则的任何信息。这些都不打印命令的行号,但是make -n --debug=b
将同时打印正在构建的目标和正在运行的命令,因此几乎一样。下面的示例。
$ cat makefile
:
c: a b
cat $^ > $@
a:
echo 'foo' > $@
b: a
cat $^ > $@
echo 'bar' >> $@
$ make -n --debug=b
:
Reading makefiles...
Updating goal targets....
File 'a' does not exist.
Must remake target 'a'.
echo 'foo' > a
Successfully remade target file 'a'.
File 'b' does not exist.
Must remake target 'b'.
cat a > b
echo 'bar' >> b
Successfully remade target file 'b'.
Prerequisite 'a' is newer than target 'c'.
Prerequisite 'b' is newer than target 'c'.
Must remake target 'c'.
cat a b > c
Successfully remade target file 'c'.