什么时候我应该在编译前删除目标文件

When should I delete object files before compiling?

本文关键字:删除 目标 文件 编译 我应该 什么时候      更新时间:2023-10-16

在编译脚本中,我通常看到总是在编译前删除目标文件的调用。这会减慢构建过程吗?当决定重新编译目标文件时,是否真的有必要使用编译器来检查它们是否过期?

有时,如果您将源文件还原为以前的版本,.o将具有比其源文件更新的日期,因此不会将其提供给编译器。如果您有理由还原源文件,您几乎肯定希望重新构建对象。做一个干净的构建确保你得到你认为你得到的。

在某种程度上,删除现有的目标文件首先违背了拥有独立翻译单元的目的。您的标准构建环境通常应该只重新构建那些比相应的源文件更老的目标文件。(你不需要删除,你可以覆盖)

如果您有一个不错的版本控制系统,那么即使签出修改文件的旧版本,也会使磁盘上的实际文件具有当前的时间戳,但是,如果您担心某些内容可能不一致,您总是可以清理整个构建树并重新开始。但是在正常的代码编写中,删除目标文件会显得非常浪费。

你当然应该为每一组构建选项保留一组目标文件(例如调试和发布)。一些构建环境允许你有多个输出目录,其他的(如cmake)会自动重建一切,如果你改变全局构建设置,但这是需要注意的,特别是如果你只是添加一些#定义编译器标志在构建过程的中间。

1)是,2)不是,但它不是编译器注意到这一点,它是构建系统(IDE或编写良好的makefile)