在visual studio 2015社区版中,我使用以下文件结构进行调试构建。
A.cpp B.cpp包括A.cpp C.cpp包括A.cpp和B.cpp main.cpp包括A.cpp,B.cpp和C.cpp
因此,当我在调试模式下更改A.cpp时,我只重新编译了A.cpp和main.cpp,但是当我进入Release构建模式时,我只重新编译了A.cpp。我也得到一些消息:
在发布模式下编译: 编译了17个函数中的0个(0.0%),其余部分是从以前的编译中复制的。
在调试模式下编译: 正在跳过...(未检测到相关更改)
我希望能够重新编译所有文件,因为我在所有文件中包含A.cpp,并且我更改了它。
P.S。我知道它包含.cpp文件,但这只是一些实验,我想了解它是如何工作的。
答案 0 :(得分:5)
Visual Studio最小重建工作的粒度比每个文件更精细。如果您只是更改非内联函数的内容但签名保持不变,则Visual C ++工具链有时可以避免重新编译,即使它们包含更改的文件。
仍然需要文件修改时间来决定要解析的内容,但编译器然后应用AST级依赖项 - 如果令牌流与先前版本匹配且没有任何AST级输入已更改,则编译器可以重用以前为该函数生成的目标代码,而不是重复优化步骤。