运行 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 形式的特殊规则,其中 from 和 to 是文件扩展名):
# (You do not need to add this to your MAKEFILE. It is a built-in rule of NMAKE.)
.c.exe:
$(CC) $(CFLAGS) $<
CC
宏预定义为cl
,CFLAGS
宏未预定义,因此为空。 $<
是一个特殊的文件名宏,它扩展为时间戳晚于目标的依赖文件。 ($<
仅在推理规则中使用时有效。)
尝试以下 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
我有一个名为 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 形式的特殊规则,其中 from 和 to 是文件扩展名):
# (You do not need to add this to your MAKEFILE. It is a built-in rule of NMAKE.)
.c.exe:
$(CC) $(CFLAGS) $<
CC
宏预定义为cl
,CFLAGS
宏未预定义,因此为空。 $<
是一个特殊的文件名宏,它扩展为时间戳晚于目标的依赖文件。 ($<
仅在推理规则中使用时有效。)
尝试以下 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