Подтвердить что ты не робот

Почему Visual Studio 2008 всегда перестраивает весь проект?

У меня есть проект Visual Studio с 60 исходными файлами на С++. Я могу сделать сборку, и она завершается без ошибок. Но если я снова удалю F7, он всегда перекомпилирует около 50 исходных файлов. Он не перекомпилирует все файлы, что странно.

У меня есть опция "Включить минимальную перестройку" (/Gm). Любые идеи, почему это может быть сделано? В будущем ни один из файлов не будет иметь модифицированную дату.

4b9b3361

Ответ 1

Являются ли ваши даты в будущем? Это может произойти, если вы изменили часовые пояса или изменили время работы системы. Даты в будущем будут путать IDE и принудительно перестраивать каждый раз, когда ударяют F7 или F5.

Ответ 2

Я решил ту же проблему.

В моем случае компилятор отобразил предупреждение, что опция /Zi требуется, если задан /Gm.

/Gm разрешает "минимальную перестройку", которая требует отладочной информации в файле .pdb. Итак, если вы не хотите использовать .pdb, также отключите перенастройку minumum - она ​​решила проблему в моем случае.

Ответ 3

Скорее всего, это вопрос зависимостей.

Рассмотрим следующие возможности:

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

  • Если у вас есть пользовательские события сборки, проверьте, не влияет ли вывод этих событий сборки на зависимости создаваемых файлов.

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

Ответ 4

В моем случае такого эффекта (С++ через VS2005) он был только в конфигурации Release, и Studio сообщает в выводе сборки, что параметр компилятора /Gm игнорируется, если опция /Zi - не задана. После установки /Zi через

Свойства конфигурации → C/С++ → Общие → Формат отладки: база данных программы (/Zi),

это было нормально. Но разве что-то не так, когда для конфигурации Release требуется что-то для отладки? Мне еще не ясно!

Ответ 5

Параметр выходных файлов C/С++ "Название файла базы данных программы" не должно быть пустым. Установите этот параметр, выбрав из раскрывающегося списка. Параметр будет установлен следующим образом: $(IntDir)\vc90.pdb. И строка ProgramDataBaseFileName = "" будет удалена из файла vcproj.

Затем только файлы *.cpp будут перекомпилированы, когда вы нажмете F7.

Ответ 6

У меня такая же проблема, и похоже, потому что я отключил просмотр информации. Свойства- > C/С++ → Обзор Info- > Включить Обзор Info- > Нет. Единственное исправление, которое я нашел, это вернуть его обратно. Это для проекта xbox 360, fwiw, мои другие проекты не имеют проблемы.

Ответ 7

Кажется, что эта проблема может быть вызвана многими вещами, но для меня это было исправлено:

  • Закрытие Visual Studio
  • Вручную удалять все папки bin и obj (Чистота не кажется трюком)
  • Открытие решения и запуск Clean (я не уверен, что это необходимо, но я сделал это на всякий случай...)
  • Построение как обычно

Примечание. Это было для программы С# в Visual Studio 2010.

Ответ 8

После нескольких дней поиска в Интернете я оказался в решении моей проблемы.

Я столкнулся с этой проблемой, когда перенес свои проекты на новый ПК. Я проверил несколько раз дату создания файлов. Эти даты были актуальными, однако даты модификации были в bast (вроде бы странно), даже когда я сменил файлы.

Простое обновление файлов разрешило проблему.

Ответ 9

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

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

Ответ 10

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

Ответ 11

Проверьте свой проект Значок файла базы данных. По какой-то причине, если это задано для имени каталога (например, "$(IntDir)\"), иногда это может привести к тому, что VS будет каждый раз перестраивать ваш проект, даже если вы не создаете файлы PDB (т.е. Установлен формат информации отладки на "Отключено" ).

Это ошибка в VS2008; Я еще не воспроизвел его еще в VS2010, но мои тесты не были исчерпывающими, поэтому я не уверен, что поведение в VS2010 отсутствует.

Ответ 12

Что вызвало подобные симптомы у меня: У меня есть несколько проектов в решении. Были файлы .cpp, на которые ссылались (и, следовательно, были скомпилированы) нa > 1 проект. К сожалению, Visual Studio создает файлы .obj с очень простым наименованием - он просто заменяет ".cpp" на ".obj". Создание обертки .cpp-s с разными именами решало проблему.

Ответ 13

У меня было что-то подобное. Несмотря на то, что у меня были события до и после сборки, они не вызывали проблемы. Оказалось, что у меня было несколько проектов по цепочке ссылок, у которых были файлы содержимого, которые были помечены как "копировать всегда" вместо "copy if newer", что означает, что эти проекты всегда считались "устаревшими". Изменив все эти параметры на "copy if newer", изменения в моем проекте unit test больше не заставили перекомпилировать все другие проекты.

Ответ 14

Отключение "минимальной перестройки" (Свойства конфигурации > C/С++ > Генерация кода) исправила это для меня. Компилятор даже оставил ключ:

1 > cl: Предупреждение командной строки D9007: '/Gm' требует '/Zi или /ZI '; опция игнорируется

Хотя я должен указать, компилятор не проигнорировал вариант, как он сказал.

Ответ 15

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

Ответ 16

Мы имеем это здесь регулярно:

  • удалить все промежуточные и выходные файлы вручную. Чистой опции в vstudio иногда недостаточно. С самого начала сделайте полную сборку. Если после полной сборки vstudio все еще хочет перекомпилировать определенные файлы, это может быть связано с следующей маркой.
  • Если в вашем файле vcxproj указан файл заголовка, который не находится на диске, проект также перекомпилируется. Вы можете проверить это с помощью какой-либо скрытой функции, описанной в блогах MSDN, или просто коснуться (например, щелкнуть по ней, чтобы открыть) все файлы заголовков в объекте проекта и посмотреть, не существует ли на диске

Ответ 17

Была та же проблема. Решено: -delete выходную папку (obj, exe, все файлы) -run cygwin папка проекта -cd -run "touch *", который reset изменяет дату/время файла -строить и использовать исправленную проблему

Ответ 18

Аналогичная проблема с перестройкой проекта. Visual Studio не перекомпилирует, а перенаправляет проект каждый раз при ударе F7.

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