Makefile编译所有文件,即使更改是在单个c++文件中完成的

Makefile compiles all files, even though changes are done in a single c++ file

本文关键字:文件 c++ 单个 编译 Makefile      更新时间:2023-10-16

我从事的项目涉及大量的c++文件。我问这个问题是出于好奇。

通常,在完成make之后,要修改的特定c++文件将单独编译,以供后续的makes使用。有时,我在单个c++文件中遇到的即使是小的修改也会导致几乎所有其他c++文件和最终可执行文件的编译。

Makefile编译其他未修改的c++文件的原因是什么?

因此makefile中出现了timestamping的概念。比如说make规则就是这样的

output: dep1
     rule-1
dep1: dep2
     rule-2

执行makefile时,make首先检查output文件的timestamp(如果output文件不存在,则默认情况下执行该规则)。假设output是在1200小时创建的,并且您在1205小时更改文件dep1并执行make,则make发现目标输出比其dependency dep1旧,因此它将执行规则-1。如果假设output在1300时创建,dep1在1230时创建,并且现在您在1310时更新dep2,并执行make。您可以在这里看到,由于dep1早于dep2,执行了规则2,并且dep1的时间戳已经更改,因此output现在早于dep1,因此执行了规则1。您可以在这里看到,尽管output不直接依赖于dep2,但它是在您更新dep2 时重建的

这就是你的情况。检查makefile并尝试检查您编辑的文件的相关性。将重新生成依赖于已编辑文件的目标。