c - 当隐式规则没有说明可执行文件时,make 如何从 C 源文件构建可执行文件?

标签 c makefile compilation executable

来自GNU Make Manual我知道 .c 有一条隐含规则程序:

n.o is made automatically from n.c with a recipe of the form ‘$(CC) $(CPPFLAGS) $(CFLAGS) -c’

例如,当我输入 make helloworld 时并且只有一个 helloworld.c我的工作目录中的文件,我看到执行了以下内容:

cc helloworld.c -o helloworld

如果我输入 make -d helloworld我从来没有看到 make寻找中间人helloworld.o文件。

最后,我没有看到 .o文件在我的目录下,只有可执行文件。 make如何如果 .c 的隐式规则,则从源文件构建可执行文件程序说它应该构建一个 .o文件?

最佳答案

内置数据库中有不同的隐式规则。如果模式规则不明确,make 永远不会反对,因为它总是为它们设置优先级。

在这种情况下,规则 %: %.o%.o: %.c 被规则 %: %.c< 取代(因为一步胜于两步 ;-)),它编译成可执行文件而无需创建目标文件(是的,gcc 可以做到这一点)。

但是,您可以使用此命令强制创建 .o:

make helloworld.o helloworld

在这里,在 helloworld.o 成功创建后,make 将优先使用 %: %.o 规则而不是 %: %.c,因此它按预期工作。

关于c - 当隐式规则没有说明可执行文件时,make 如何从 C 源文件构建可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55727692/

相关文章:

c - 如果没有以下 make 文件,我该如何手动执行?

c++ - Netbeans C++ : Execute a source script before building

c++ - 我可以在不计算的情况下从 Windows RECT 结构访问宽度和高度吗?

c - 模拟ARM代码

在 C 中使用 for 循环创建链表并赋值

BBB 上的 Ruby 2.00 编译错误

由于外部库,Java 无法在终端中编译

c++ - Windows 10 中非事件桌面上的 PrintWindow

build-process - 制作带有两个目标的源

c++ - 使用未声明的标识符与模板和继承后续