Exe выполняет полную ссылку при изменении библиотеки, несмотря на добавочные ссылки
У меня есть проект MSVC++, состоящий из исполняемого файла, нескольких собственных статических библиотек и некоторых предварительно скомпилированных статических сторонних библиотек. Exe использует инкрементное связывание, чтобы ускорить время сборки.
Когда я изменяю файл.cpp в исполняемом проекте, компиляция + компоновка выполняются очень быстро (<10 с).
Однако, когда я изменяю файл.cpp в одной из моих собственных библиотек, исполняемый проект, кажется, создает полную ссылку на каждую библиотеку, которую он использует.
Я больше не уверен, действительно ли это полная ссылка, но из предупреждений компоновщика "vc90.pdb not found" я могу сказать, что он ссылается на некоторые внешние библиотеки, которые вообще не изменились.
Вот пример структуры проекта:
- Прекомпилированные сторонние библиотеки
ExtLib1
,ExtLib2
а такжеExtLib3
- Собственная библиотека
MyLib
, используя стороннюю библиотекуExtLib1
- Собственный Exe
MyExe
, с помощьюMyLib
а такжеExtLib1-3
Изменение файла.cpp в MyLib
затем приведет к MyExe
быть связанным с MyLib
, ExtLib1
, ExtLib2
а также ExtLib3
, даже если инкрементное связывание включено.
Полная ссылка занимает около 5 минут в моем проекте, поэтому я спрашиваю: есть ли способ повторно связать только измененную библиотеку?
2 ответа
Это введение в добавочные ссылки. В нем перечислены ситуации, которые приведут к полной ссылке. Одним из них является "Объект, который был скомпилирован с параметром /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/, в частности:
Это по замыслу. Мы не можем постепенно ссылаться при изменении статической библиотеки. Это никогда не поддерживалось раньше.
Рональд Лереманс, команда 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.