我的make
命令出现了奇怪的行为。
在执行之前不打印命令行。
我知道在命令行之前存在-s
,--silent
和--quiet
选项或@
的用法。而且我不使用任何一种。
例如,一个非常基本的Makefile:
all:
touch toto.txt
rm toto.txt
在我的电脑上执行:
mylogin@debian:~$ make
mylogin@debian:~$
在另一台计算机上执行:
mylogin@debian:~$ make
touch toto.txt
rm toto.txt
mylogin@debian:~$
这两台计算机上的make版本相同:
mylogin@debian:~$ make -version
GNU Make 3.81
...
打印命令行是默认行为(https://www.gnu.org/software/make/manual/html_node/Echoing.html),我不会使用任何特殊配置。
有人知道为什么make
执行但没有回显命令行?
PS:
rm toto.txt
,则创建的文件没有任何回复。PPS:
当我发出make -d
时,这些是输出的最后一行:
Considering target file `all'.
File `all' does not exist.
Finished prerequisites of target file `all'.
Must remake target `all'.
Need a job token; we don't have children
Putting child 0x01144970 (all) PID 7478 on the chain.
Commands of `all' are being run.
Live child 0x01144970 (all) PID 7478
Reaping winning child 0x01144970 PID 7478
Removing child 0x01144970 PID 7478 from chain.
Considering target file `all'.
File `all' was considered already.
答案 0 :(得分:3)
调试输出中有这个字符串:
需要工作代币;我们没有孩子
除非我使用-j
选项,否则无法在调试输出中获取此字符串。但是,您声明在命令行中使用了make -d
。这也是你的粘贴页显示的内容。
这告诉我你没有运行库存(即未修改的)GNU make。可能性:
您实际上正在运行一个包裹真实制作的脚本,并传递-j
和-s
以使另外到您提供的参数。 -j
的添加解释了上面的这一行。 -s
的添加解释了为什么你没有得到回声。
你有一个shell别名或shell函数,它与上面提到的脚本相同。 (在bash中,您可以使用type -a make
来检查make
是什么。感谢MadScientist提醒type -a
。)
您正在使用MAKEFLAGS
环境变量来设置-j
和-s
。 (在bash中,您可以使用printenv MAKEFLAGS
进行检查。)
您正在运行自定义二进制文件。
答案 1 :(得分:1)
您的计算机上的工作目录中可能有一个名为all
的文件或目录。 Make看到了,并看到规则在makefile中创建all
,并确定它是最新的(因为它存在且没有先决条件),所以没有做任何事情。
在您的makefile中添加.PHONY: all
将解决此问题。您还可以运行make -d
,并在运行makefile时查看make(非常详细)的内容。