我有一个MSVC++项目,该项目由一个可执行文件,几个自己的静态库和一些预编译的静态第三方库组成。exe 使用增量链接来加快构建时间。
当我在可执行项目中更改.cpp文件时,编译+链接非常快(<10s).
但是,当我在自己的一个库中更改.cpp文件时,可执行项目似乎正在对它使用的每个库执行完整链接.
我不再确定它实际上是否是一个完整的链接,但是从"vc90.pdb未找到"链接器警告中,我可以说它链接到一些根本没有更改的外部库。
下面是项目结构的示例:
- 预编译的第三方库
ExtLib1
、ExtLib2
和ExtLib3
- 自己的库
MyLib
,使用第三方库ExtLib1
- 拥有 Exe
MyExe
,使用MyLib
和ExtLib1-3
在MyLib
中更改.cpp文件会导致MyExe
链接到MyLib
、ExtLib1
、ExtLib2
和ExtLib3
,即使打开了增量链接。
在我的项目中,完整链接大约需要 5 分钟,所以我问:有没有办法只重新链接更改的库?
这是对增量链接的介绍。它列出了将导致完整链接的情况。其中之一是"使用/Yu/Z7 选项编译的对象已更改",请检查您的 MyLib 是否捕获了它。
当静态库更改时,可执行文件将始终有一个完整链接,至少在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,视觉C++团队
编辑 - 确认VS 2015在使用静态库时具有增量链接:http://blogs.msdn.com/b/vcblog/archive/2014/11/12/speeding-up-the-incremental-developer-scenario-with-visual-studio-2015.aspx。