我有一个简单的 c 程序 - hello_world.c
从文件名可以看出,我对 c 非常陌生。
我希望执行以下操作来编译:
make hello_world.c
但这给出了一条错误消息:make: Nothing to be done for hello_world.c.
如果我只是这样做make hello_world
,即没有扩展名。
有人可以解释这是为什么吗?
我有一个简单的 c 程序 - hello_world.c
从文件名可以看出,我对 c 非常陌生。
我希望执行以下操作来编译:
make hello_world.c
但这给出了一条错误消息:make: Nothing to be done for hello_world.c.
如果我只是这样做make hello_world
,即没有扩展名。
有人可以解释这是为什么吗?
make
将目标作为其参数。如果你告诉它你想要 make hello_word.c
,它会查看,看到该文件已经存在并且没有依赖关系,并且会确定它是最新的 - 因此无事可做。
当你说make hello_world
, make 寻找hello_word
,找不到它,然后寻找hello_world.o
,找不到它,然后寻找hello_world.c
,找到它,然后使用它的隐含规则来构建hello_world
它。
您可以使用它make -d
来查看make
沿途做出的决定。这是示例make hello_world.c
- 我修剪了一堆来展示最后一部分,这就是你关心的:
...
Considering target file `hello_world.c'.
Looking for an implicit rule for `hello_world.c'.
...
No implicit rule found for `hello_world.c'.
Finished prerequisites of target file `hello_world.c'.
No need to remake target `hello_world.c'.
make: Nothing to be done for `hello_world.c'.
然后,对于make hello_world
:
...
Considering target file `hello_world'.
File `hello_world' does not exist.
Looking for an implicit rule for `hello_world'.
Trying pattern rule with stem `hello_world'.
Trying implicit prerequisite `hello_world.o'.
Trying pattern rule with stem `hello_world'.
Trying implicit prerequisite `hello_world.c'.
Found an implicit rule for `hello_world'.
Considering target file `hello_world.c'.
Looking for an implicit rule for `hello_world.c'.
Trying pattern rule with stem `hello_world'.
...
No implicit rule found for `hello_world.c'.
Finished prerequisites of target file `hello_world.c'.
No need to remake target `hello_world.c'.
Finished prerequisites of target file `hello_world'.
Must remake target `hello_world'.
cc hello_world.c -o hello_world
...
Successfully remade target file `hello_world'.
“Make”是一种用于构建具有多个源文件的重要项目的工具。如果您只想编译单个 C 文件,请使用 C 编译器。cc
通常可用作 C 编译器的命令行名称,但gcc
也是一个通用名称(可能指同一个编译器)。