【发布时间】:2017-03-11 08:42:57
【问题描述】:
在使用 GNU Make(或 SCons)编译 (C/C++) 代码并成功创建二进制文件后,是否有任何理由保留 .o 目标文件?
我是否可以始终安全地删除它们,或者是否存在二进制文件引用它们的情况?
【问题讨论】:
标签: compilation gnu-make binaryfiles scons
在使用 GNU Make(或 SCons)编译 (C/C++) 代码并成功创建二进制文件后,是否有任何理由保留 .o 目标文件?
我是否可以始终安全地删除它们,或者是否存在二进制文件引用它们的情况?
【问题讨论】:
标签: compilation gnu-make binaryfiles scons
一旦您通过链接目标文件(和 他们所依赖的库)目标文件是废物到目前为止 您的可执行文件受到关注。您可以安全地删除它们。
但是,如果您使用 GNU Make 等构建系统构建可执行文件 或 Scons 肯定不建议让构建系统删除 成功构建的目标文件。
这种构建系统的主要目的是重新构建您的可执行文件,
当它需要重建时,最小的重建量是
必要的。如果可执行文件prog 需要目标文件a.o、b.o 和c.o
被链接,你只改变源文件c.c,然后是构建系统
会知道它可以重建prog 只需重新编译c.c
然后将prog 与新的c.o 加上旧的a.o 和b.o 重新链接。
但只有在旧的a.o 和b.o 仍然存在的情况下,它才能实现这种经济。
如果您在上次成功构建时删除了它们,那么prog 必须
从头开始重建,尽管新的 a.o 和 b.o 将是相同的
和旧人一样:浪费时间。
当然,有时您想要从头开始重建,并且
为此,您必须首先删除所有目标文件。为了支持这一点
在 GNU 中需要让你为你的项目提供一个phony target,
通常称为clean,除了删除目标文件之外什么都不做
以及构建的任何其他中间副产品。您可以通过以下方式显式调用它:
make clean
在 Scons 中,您无需在构建项目中编写任何额外内容即可
清理中间产品。你只需运行scons -c 或scons --clean。
但无论哪种情况,您都不想删除成功的目标文件
默认构建,因为这违背了构建系统的目的。
【讨论】: