c - 当隐式规则没有说明可执行文件时,make 如何从 C 源文件构建可执行文件?
问题描述
从GNU Make Manual我了解到程序有一个隐含的规则.c
:
no 由 nc 自动生成,配方形式为 '$(CC) $(CPPFLAGS) $(CFLAGS) -c'</p>
例如,当我键入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
rule over %: %.c
,因此它按预期工作。
推荐阅读
- linux - 尝试为 Cloudformation 创建/更新 bash 脚本时出现 AlreadyExistsException 错误
- google-analytics - 如何获取没有事件类别的事件的统计信息?
- flutter - 从不同的小部件获取变量值
- sql - 日期是 01/09/?
- javascript - Javascript Interval 在不满足条件的情况下继续无穷无尽
- php - 如何将数据从 Flutter 发送到 PHP,然后再发送到 MySQL 数据库
- c# - 错误 XLS0525 在类型中找不到方法 - 绑定泛型委托时?
- r - 如何更改ggplot2中geom_rects图例的顺序?
- xml - 在 XSD 中,是否可以为属性设置替代类型?
- javascript - javascript:插入带有innerHTML的html标签