我有一个MSVC ++项目,包含一个可执行文件,几个自己的静态库和一些预编译的静态第三方库。 exe使用增量链接以加快构建时间。
当我在可执行项目中更改.cpp文件时,编译+链接非常快(<10s)。
但是,当我在自己的一个库中更改.cpp文件时,可执行项目似乎正在针对它使用的每个库执行完整链接。
我不太确定它是否真的是一个完整的链接,但是从“找不到vc90.pdb”链接器警告,我可以告诉它链接到一些没有改变的外部库。
以下是项目结构的一个示例:
ExtLib1
,ExtLib2
和ExtLib3
MyLib
,使用第三方资料库ExtLib1
MyExe
,使用MyLib
和ExtLib1-3
更改MyLib
中的.cpp文件会导致MyExe
与MyLib
,ExtLib1
,ExtLib2
和ExtLib3
相关联,即使增量链接已开启。
在我的项目中,完整链接大约需要5分钟,所以我问:有没有办法只重新链接已更改的库?
答案 0 :(得分:2)
这是对incremental linking的介绍。它列出了将导致完整链接的情况。其中一个是“使用/ Yu / Z7选项编译的对象已更改。”,检查您的MyLib是否捕获了它。
答案 1 :(得分:1)
当静态库发生变化时,可执行文件将始终存在完整链接,至少在Visual Studio 2013中,您可能会在输出窗口中看到类似的内容:
2>Link:
2> LINK : library changed; performing full link
好消息:我在Visual Studio 2015中进行了快速测试,增量链接似乎按预期工作。
来源:大量的实验和环顾四周,遇到了同样的问题。另外,这个:http://www.pcreview.co.uk/threads/incremental-linking-and-multiple-projects.1431266/,具体来说:
这是设计的。当静态库发生变化时,我们无法逐步链接。 之前从未支持过。
Ronald Laeremans,Visual C ++团队
编辑 - 它确认VS 2015在使用静态库时具有增量链接:http://blogs.msdn.com/b/vcblog/archive/2014/11/12/speeding-up-the-incremental-developer-scenario-with-visual-studio-2015.aspx。