为什么 "make" 什么都不回显?

Why doesn't "make" echo anything?

我的 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:

PPS:

您计算机上的工作目录中可能有一个名为 all 的文件或目录。 Make 看到了这一点,并看到了在你的 makefile 中创建 all 的规则,并确定它是最新的(因为它存在并且没有先决条件)所以什么都不做。

.PHONY: all 添加到您的 makefile 将解决此问题。您还可以 运行 make -d 并查看 make 在 运行 生成您的 makefile 时在想什么(非常详细)。

你的调试输出中有这个字符串:

Need a job token; we don't have children

除非使用 -j 选项,否则我无法在调试输出中获取此字符串。但是,您声明在命令行中使用了 make -d。这也是您的 pastebin 显示的内容。

这向我表明您不是 运行 库存(即未修改的)GNU 品牌。可能性:

  • 你实际上是运行一个脚本,它包裹了真正的make并通过-j-s来制作另外 到你给的参数。 -j 的添加解释了上面的行。 -s 的添加解释了为什么您没有收到回声。

  • 您有一个 shell 别名或一个 shell 函数,其作用与上面假定的脚本相同。 (在 bash 中你可以使用 type -a make 来检查 make 是什么。感谢 MadScientist 关于 type -a 的提醒。)

  • 您正在使用 MAKEFLAGS 环境变量来设置 -j-s。 (在 bash 中你可以用 printenv MAKEFLAGS 检查它。)

  • 您是 运行 自定义二进制文件。