如果我保留二进制文件,删除目标文件是否安全?

Is it safe to remove the object files if I keep the binary?

使用 GNU Make(或 SCons)编译(C/C++)代码并成功创建二进制文件后,是否有任何理由保留 .o 目标文件?

我能否始终安全地删除它们,或者是否存在二进制文件引用它们的情况?

通过链接目标文件(和 它们所依赖的库)目标文件是浪费 material 到目前为止 您的可执行文件是相关的。您可以安全地删除它们。

但是,如果您使用 GNU Make 等构建系统构建可执行文件 或 Scons 使该构建系统删除肯定是不可取的 成功构建的目标文件。

这种构建系统的主要目的是重建你的可执行文件, 当它需要重建时,重建的数量最少 必要的。如果可执行文件 prog 需要目标文件 a.ob.oc.o 被链接并且您只更改源文件 c.c,然后是构建系统 将知道它可以仅通过重新编译 c.c 来重建 prog 然后将 prog 与新的 c.o 加上旧的 a.ob.o.

重新链接

但只有旧的 a.ob.o 仍然存在,它才能实现这种经济。 如果您在上次成功构建时删除了它们,那么 prog 必须 从头开始重建,尽管新的 a.ob.o 是一样的 作为旧的:浪费时间。

当然有些时候您想要从头开始重建,并且 为此,您必须先删除所有目标文件。为了支持那个 在 GNU 中需要让你为你的项目提供一个 phony target, 通常称为 clean,除了删除目标文件外什么都不做 以及构建的任何其他中间副产品。您可以通过以下方式显式调用它:

make clean

在 Scons 中,您无需在构建项目中编写任何额外的内容 清理中间产品。您只需 运行 scons -cscons --clean。 但是在任何一种情况下,您都不想删除成功的对象文件 默认构建 ,因为这违背了构建系统的目的。