4

我有一个简单的 c 程序 - hello_world.c

从文件名可以看出,我对 c 非常陌生。

我希望执行以下操作来编译:

make hello_world.c

但这给出了一条错误消息:make: Nothing to be done for hello_world.c.

如果我只是这样做make hello_world,即没有扩展名。

有人可以解释这是为什么吗?

4

2 回答 2

7

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'.
于 2013-06-07T17:11:22.393 回答
-2

“Make”是一种用于构建具有多个源文件的重要项目的工具。如果您只想编译单个 C 文件,请使用 C 编译器。cc通常可用作 C 编译器的命令行名称,但gcc也是一个通用名称(可能指同一个编译器)。

于 2013-06-07T17:13:00.730 回答