运行 C 中的 make 文件时的最新消息

Up to date message when running a make file in C

我有一个名为 hello 的 make 文件。

hello:
    cl hello.c

是它的内容。我没有准备好现有的 .exe,当我键入 nmake hello 时, 我收到消息说 'hello' 是最新的。

预期输出:

我没有得到预期输出的原因是什么? 以及如何让它工作?

非常感谢。

I Don't have an existing .exe ready

没关系,但你的目标不叫hello.exe,叫hello

最有可能发生的事情是 nmake 告诉您 hello 已经是最新的,因为您的文件夹中已有 hello 文件。将规则重命名为 hello.exe:

hello.exe:
    cl hello.c

或者保持原样并删除 hello 文件。

在您的 MAKEFILE 中:

hello:
    cl hello.c

构建 hello 目标的规则没有明确的依赖关系,也不匹配任何推理规则(见下文)。 NMAKE 会将其视为 伪目标 。因为它既是伪目标又没有依赖,所以它总是被认为是最新的,所以命令块 cl hello.c 不会是 运行.

在这种情况下,对于从单个 .c 文件构建 .exe 文件,您不需要明确的规则,您可以使用 NMAKE 的内置 .c.exe inference 规则(推理规则是 .from.to 形式的特殊规则,其中 fromto 是文件扩展名):

# (You do not need to add this to your MAKEFILE. It is a built-in rule of NMAKE.)
.c.exe:
    $(CC) $(CFLAGS) $<

CC宏预定义为clCFLAGS宏未预定义,因此为空。 $< 是一个特殊的文件名宏,它扩展为时间戳晚于目标的依赖文件。 ($< 仅在推理规则中使用时有效。)

尝试以下 MAKEFILE:

hello.exe:

这里,hello.exe 是 MAKEFILE 中的第一个目标,默认 目标也是如此。

目标 hello.exe 的 MAKEFILE 规则不包含命令块,但由于 hello.c 文件存在,它匹配 NMAKE 的内置 .c.exe 推理规则(如上所述) .当应用于目标 hello.exe 时,此推理规则使 hello.c 成为目标的隐式依赖,特殊宏 $< 将扩展到此隐式依赖,即 $< 将扩展到 hello.c。由于 $(CFLAGS) 为空,当从属 hello.c 比目标 hello.exe 更新时,推理规则将导致以下命令为 运行:

cl hello.c