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.

Другие вопросы по тегам