VS2010 всегда связывает проект - PullRequest
11 голосов
/ 14 апреля 2010

Я мигрирую комплексное смешанное решение C ++ / .NET с VS2008 на VS2010.

Обновленное решение работает в VS2010, но система сборки всегда , ссылаясь на одну сборку C ++ / CLI. Он ничего не перекомпилирует, но компоновщик касается файла. Вызывает волновой эффект вниз по течению в сборке, поскольку целая куча зависимых затем перестраивается.

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

Ответы [ 2 ]

8 голосов
/ 18 апреля 2010

Оказывается, проблема в том, что имя файла PDB было определено в и настройках компилятора и настройках компоновщика (с тем же именем).

Это казалось причиной проблемы в VS2010, поскольку каким-то образом «старый» pdb из промежуточного каталога (вывод компилятора?) Копировался поверх одного в выходном каталоге (вывод компоновщика?). Это привело к тому, что pdb в выходном каталоге был старше, чем некоторые файлы obj, и в следующий раз принудительно перекомпоновал (промыть и повторить).

Сброс настроек имени pdb, похоже, решил проблему, и настройки по умолчанию были в порядке.

1 голос
/ 28 ноября 2012

Я просто добавляю это для записи, на случай, если кто-то еще получит эту проблему в будущем.

У нас была похожая проблема с большим смешанным проектом FORTRAN / C ++, повторяющим, изменилось ли что-нибудь или нет. Кажется, это началось, когда решение было обновлено с VS2008 до 2010, хотя никто не мог вспомнить.

В конце концов, я серьезно взглянул на это (это раздражало, но не достаточно, чтобы что-то сделать). По процессу исключения я нашел решение:

Удалите все кавычки в «Дополнительных библиотечных каталогах» проекта FORTRAN верхнего уровня (то есть того, который делает исполняемый файл).

Я бы сам не поверил в это без доказательств, поэтому, если у вас есть желание воспроизвести эту ошибку самостоятельно:

  1. Открыть новый сеанс VS2010.
  2. Создайте новый проект FORTRAN, который делает исполняемый файл.
  3. Оставьте его пустым, но свяжите его с не встроенным файлом lib (т.е. одним из ваших) и добавьте каталог вашей библиотеки в каталоги дополнительных библиотек.
  4. Проверьте правильность компиляции и ссылок.
  5. Теперь попробуйте добавить двойные кавычки (") вокруг каталога и несколько раз нажмите" Построить ". Если ваша сессия похожа на мою, то она будет каждый раз связываться. Когда вы удаляете кавычки, она останавливается.

Это только кажется проблемой в проекте верхнего уровня, и когда эти проекты FORTRAN - кавычки не влияют на проекты C ++ или те, которые создают библиотеки.

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

Если кто-то может оправдать эту "особенность", пожалуйста, дайте мне знать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...