2013-08-07 4 views
0

У меня есть два решения, которые включают в себя и ссылаются на одну и ту же статическую библиотеку. И я включаю библиотеку, используя функцию «Добавить ссылку ...», в отличие от указания дополнительного ввода компоновщика. Кажется, что, когда я строю одно из решений, это заставляет другое решение думать, что ему нужно перестроить разделяемую библиотеку, а затем заставляет ее повторно связать второе решение. Таким образом, если я перехожу назад и вперед между двумя решениями (без каких-либо изменений кода), решения выполняют связь каждый раз.Обмен статическими библиотеками C++ между несколькими решениями вызывает ненужную перестройку

Похоже, что общая статическая библиотека на самом деле повторно скомпилирована, но VS выполняет для нее библиотечный шаг. Я предполагаю, что этот этап библиотекаря происходит потому, что файл .lastbuildstate (который содержит путь к решению, который в последний раз строит проект), как установлено, устарел.

Кто-нибудь когда-либо испытывал эту проблему раньше? Есть ли лучший способ сделать это?

+2

Если у вас libX как зависимость от ProjA и ProjB, и вы перестраиваете ProjA * с зависимостями * (в отличие от построения * только * ProjA, выбираемый вариант, если вы щелкните его правой кнопкой мыши в проводнике решений), он перестроит libX, а также вызвать несоответствие зависимостей ссылок на ProjB. Вот как работает VS. Проверьте, как вы перестраиваете ProjA или ProjB. Просто выбрав «Rebuild» будет вызывать поведение, описывающее по-дизайн. – WhozCraig

+0

У вас есть произвольный шаг сборки в библиотеке случайно? – DarkWanderer

+0

@WhozCraig Я просто выбираю регулярную «сборку» для построения решения. – Aaron

ответ

1

Если библиотека действительно разделена и независима от обоих решений, я бы предложил переместить ее в отдельное решение ... Я понимаю, что это не то, что вы намеревались, но это кажется логичным по характеру самих зависимостей.

Еще одно соображение в пользу этого заключается в том, что впоследствии библиотека может использоваться для других проектов. Следовательно, было бы лучше переместить его в отдельное место (отдельное решение, отдельная папка в VCS) и рассматривать его как любую стороннюю библиотеку (то есть openssl, boost и т. Д.), Указав зависимость как вход линкера.

Все вышеизложенное - это только мои мысли о том, как я это сделаю и не представляю никаких «лучших практик».

+0

Да, это маршрут, который мы отправили для предыдущих проектов такого рода, но я изменил его, потому что кажется, что его легче поддерживать (VS настраивает компоновщик автоматически), и удобно иметь код библиотеки прямо там с проектом, который связывает это в (например, «Перейти к определению» работает лучше). И на самом деле, библиотека в настоящее время находится в своем собственном решении, так что, возможно, я просто вернусь к другому стилю, если перестройка станет слишком раздражающей. – Aaron

Смежные вопросы