Visual Studio-как воздержаться от компиляции всех файлов проекта при каждой сборке?


Каждый раз, когда я создаю свое решение Visual C++ в Visual Studio 2010, весь проект (а не все решение) перекомпилируется.

Где-то должен быть флаг или конфигурация, чтобы заставить VS компилировать только измененные файлы + зависимые файлы. Где же он?

Обновления:

  • я установил "Yes (/Gm)" в свойствах конфигурации моего проектаC / C++Code GenerationEnable Minimal Rebuild. Он по-прежнему компилирует все файлы проекта на F7.
5 5

5 ответов:

Если дополнительно вы получите сообщение, подобное:

Создание ".\ Отпустите \ SomeLib.неудачно построил", потому что был указан "AlwaysCreate".

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

Первая ссылка также содержит небольшой скрипт C# для проверки этой ситуации. Чтобы исправить это, просто удалите ссылку на несуществующие заголовочные файлы из вашего проект.

Обновить

Вполне возможно, что у вас есть настройки precompiled-headers на 'Create'. Чтобы исправить это, щелкните правой кнопкой мыши проект в браузере решений и выберите: свойства- > C/C++ - > предварительно скомпилированные заголовки - > предварительно скомпилированный заголовок. Измените настройку с Create на Use или Not Using Precompiled Headers.

VS должен вести себя так, как вы хотите по умолчанию; это звучит так, как будто что-то происходит. Очистите проект и удалите файлы настроек (например, .suo / vcproj..пользователь / etc). Для этого есть несколько причин, некоторые из которых я видел:

  • поврежденные файлы настроек
  • системные изменения даты / времени / часового пояса сбивают с толку vc
  • Проблемы с разрешениями на исходные файлы

У меня была та же проблема, только моя началась без причины, без внесения каких-либо изменений в конфигурацию проекта.

Я редактировал один файл, нажимал build, и он перестраивал весь проект.

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

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

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

Надеюсь, это поможет.

Пост tul был для нас толчком вперед, потому что у нас также были некоторые проекты,которые всегда перекомпилировались. В результате я обнаружил, что:

  • да, опция 'Minimal Rebuild' каким-то образом была повреждена в наших проектах visual 2010. Я думаю, это может произойти, когда они были преобразованы из визуального 2005.
  • признаком "коррупции" в конкретном проекте является то, что эта опция назначена, т. е. она выделена жирным шрифтом. Это может быть только для некоторых конфигураций, например Release, или для некоторых архитектуры, например x64. Это может быть жирным шрифтом "нет", но все равно перекомпилируется.

Исправить это так же просто, как и следующие шаги:

  • Выберите один или даже несколько проектов в решении
  • щелкните правой кнопкой мыши проект - > свойства
  • Выберите конфигурации: "все конфигурации"
  • Выберите Platform: "все платформы" (если у вас есть оба x32/x64)
  • развернуть группу C++
  • Goto "Генерация Кода"
  • Обратите внимание на опцию "Включить минимальное перестроение" - скорее всего, это будет пусто, потому что разные проекты / конфигурации имеют разные значения
  • Установите для этого параметра значение NO
  • Нажмите кнопку Применить
  • снова установите этот параметр в "унаследовано от родителя"
  • Нажмите кнопку Применить. Нет вы должны видеть, что эта опция становится "нет", но в обычном тексте.

Готово. Не нужно даже перекомпилировать. Следующая сборка будет намного быстрее.

Итак, у меня была такая же проблема с одним из наших проектов. Во-первых, я смог отладить выходные данные компилятора, выбрав:

- > Инструменты - > Параметры - > проекты и решения -> сборка и запуск - > MSBuild project build output verbosity - > Detailed.

Оказалось, что кто-то задал проекту всегда создавать предварительно скомпилированные заголовки для всех файлов (/Yc). Я изменил опцию, как указано ниже.

- > Свойства Конфигурации -> Предварительно Скомпилированный Заголовок - > Использовать (/Yu)

Затем я установил тот же параметр для stdafx.cpp to (/Yc). Итак, компиляция stdafx.cpp создает предварительно скомпилированный заголовок и все остальные .cpp-файлы используют предварительно скомпилированный заголовок. Это сценарий по умолчанию,и я не уверен, как он изменился для нашего проекта.

Кроме того, я изменил все наши настройки компилятора, чтобы они были согласованы во всех проектах, включая:

1) Настройка: C / C++ - > Precompiled Headers - > Precompiled Header - > Use (/Yu) Переключатель: / Yu Причина: более быстрое время сборки.

2) Настройка: C / C++ - > общие - > формат отладочной информации - > база данных программы для редактирования и продолжения Переключатель: /ZI
Причина: позволяет редактировать и продолжать, тем самым улучшая возможности отладки.

3) Настройка: C / C++ - > Генерация Кода - > Включить Минимальное Перестроение - > Да Переключатель: /Gm Причина: разрешить и ускорить инкрементные сборки, и это требуется для /ZI.

Надеюсь, это поможет. Я потратил много времени, возясь с нашим проектом сборки настройки и чтение сообщений для переполнения стека, и в конце концов, я скучаю по C#.