我有一个MSVC ++项目由一个可执行文件,有几个自己的静态库和一些预编译静态的第三方库。 exe文件使用增量链接,以加快构建时间。
当我更改可执行项目中.cpp文件,编译+链接是非常快(<10秒)。
但是,当我改变我自己的图书馆内一个.cpp文件,可执行项目似乎是做对使用的每个库的完整链接。
我不那么肯定了,如果它实际上是一个完整的链接,但是从“vc90.pdb未找到”链接器警告,我可以告诉大家,它链接针对已没有改变一些外部库。
下面是该项目结构的例子:
- 预编译的第三方库
ExtLib1
, ExtLib2
和ExtLib3
- 自己的库
MyLib
,使用第三方的lib ExtLib1
- 自己的Exe
MyExe
,使用MyLib
和ExtLib1-3
改变.cpp文件MyLib
,然后将导致MyExe
被链接到MyLib
, ExtLib1
, ExtLib2
和ExtLib3
,即使增量链接被打开。
一个完整的链接需要5分钟左右在我的项目,所以我问: 有什么办法来重新链接仅将更改的图书馆吗?
这是一个介绍增量链接 。 它列出了会导致完全链接的情况。 其中之一是“这是与/羽/ 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/ ,具体如下:
这是由设计。 我们不能在静态库增量的变化联系起来。 这是从未有过任何支持。
罗纳德Laeremans时,Visual C ++团队
编辑-这证实了2015年VS使用静态库时,有增量链接: http://blogs.msdn.com/b/vcblog/archive/2014/11/12/speeding-up-the-incremental-developer-scenario-with -视觉工作室,2015.aspx 。