Как исправить файл .pch, отсутствующий при сборке? - PullRequest
145 голосов
/ 23 мая 2011

Когда я собираю свое решение c ++ в Visual Studio, оно жалуется на отсутствие файла xxxxx.pch.Есть ли пропущенная настройка для возврата предварительно скомпилированных заголовков?

Вот точная ошибка для полноты:

Error   1   fatal error C1083: Cannot open precompiled header file: 'Debug\xxxxx.pch': No such file or directory

Ответы [ 10 ]

381 голосов
/ 08 сентября 2012

ПРИМЕЧАНИЕ. Более поздние версии IDE могут использовать «pch» вместо «stdafx» в именах по умолчанию для связанных файлов. Может быть необходимо заменить pch на stdafx в инструкциях ниже. Приношу извинения. Это не моя вина.

  1. Щелкните правой кнопкой мыши свой проект в обозревателе решений.
  2. Нажмите Свойства в нижней части раскрывающегося меню.
  3. В верхнем левом углу страницы свойств выберите Все конфигурации из выпадающего меню.
  4. Откройте дерево C / C ++ и выберите «Предварительно скомпилированные заголовки»
  5. Предварительно скомпилированный заголовок: выберите Использовать (/ Yu)
  6. Заполните поле «Файл скомпилированного заголовка». Стандарт stdafx.h
  7. Нажмите ОК

  8. Если в ваших заголовочных файлах нет stdafx.h, поместите его туда. редактировать это #include все заголовки, которые вы хотите предварительно скомпилировать.

  9. Поместите файл с именем stdafx.cpp в ваш проект. Поместите #include "stdafx.h" на вершине, и ничего больше.
  10. Щелкните правой кнопкой мыши stdafx.cpp в Solution Explorer. Выберите Свойства и все конфигурации снова, как в шаге 4 ...
  11. ... но на этот раз выберите Precompiled Header Create (/Yc). Это будет только привязать к одному файлу stdafx.cpp.
  12. Поместите #include "stdafx.h" в самый верх всех ваших исходных файлов.

Счастливчик 13. Скрестите пальцы и нажмите Build.

57 голосов
/ 23 мая 2011

Использование предварительно скомпилированного заголовка (pch) представляет собой двухэтапный процесс.

На первом этапе вы компилируете файл-заглушку (в VS200x он обычно называется stdafx.cpp).Этот стаб-файл косвенно включает в себя только те заголовки, которые вы хотите предварительно скомпилировать.Как правило, один маленький заголовок (обычно stdafx.h) содержит список стандартных заголовков, таких как <iostream> и <string>, и он затем включается в файл-заглушку.Компиляция создает файл .pch.

На шаге 2 ваш фактический исходный код содержит тот же маленький заголовок из шага 1, что и первый заголовок.Компилятор, когда он встречает этот специальный заголовок, вместо этого читает соответствующий файл .pch.Это означает, что он не должен (пере) компилировать эти стандартные заголовки каждый раз.

В вашем случае кажется, что шаг 1 не выполняется.Заглушка все еще присутствует?В вашем случае это, вероятно, будет xxxxx.cpp.Это должен быть файл, скомпилированный с /Yc:xxxxx.pch, так как это флаг компилятора, указывающий, что это первый шаг процесса PCH.Если присутствует xxxxx.cpp и такой файл-заглушка, то, вероятно, ему не хватает опции компилятора /Yc:.

21 голосов
/ 20 ноября 2012

Fix:

  1. Убедитесь, что в вашем проекте есть xxxxx.cpp

  2. Компиляция xxxxx.cpp с флагом / Yc ( Создать Предварительно скомпилированный заголовок)
    (щелкните правой кнопкой мыши на xxxxx.cpp -> properties -> Precompiled Headers -> create )

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

7 голосов
/ 08 августа 2012
  1. Щелкните правой кнопкой мыши проект и выберите пункт меню свойств
  2. Перейти к C / C ++ -> Предварительно скомпилированные заголовки
  3. Выберите Не использовать предварительно скомпилированные заголовки
2 голосов
/ 08 октября 2018

В случае, если это происходит с вами при сборке сервера (AppCenter), и вы, используя CocoaPods, убедитесь, что ваш Podfile зарегистрирован.

AppCenter запускает команду "pod install", только если находит Pofile.и он НЕ находит папку PODS в файлах.

Я зарегистрировал эту папку, но поскольку git автоматически игнорирует файлы .pch (проверьте, что .gitignore проверяет это), мой .pch не былпроверяется.

Я решил проблему, заставив файлы .pch проверить ее, но удаление папки PODS также должно работать, так как Appcenter будет запускать команду pod install в этом случае.

Надеюсь, это кому-нибудь поможет.

2 голосов
/ 21 ноября 2013

Да, его можно устранить с помощью параметров / Yc, как указали другие, но, скорее всего, вам не нужно прикасаться к нему, чтобы исправить это.Почему вы получаете эту ошибку в первую очередь без изменения каких-либо настроек?Возможно, вы «очистили» проект и попытались скомпилировать один файл cpp.Вы получите эту ошибку в этом случае, потому что заголовок прекомпилятора теперь отсутствует.Просто соберите весь проект (даже если он окажется неудачным), а затем соберите какой-нибудь отдельный файл cpp, и вы не получите эту ошибку.

0 голосов
/ 13 сентября 2017

Я искал файл PCH для iOS с той же проблемой, если вы попали сюда, как и я, то решение, которое я нашел, это очистка производных данных; Закройте симулятор (ы), перейдите к префиксам xCode -> местоположения -> перейдите к пути к файлу производных данных, закройте xCode, удалите файлы в папке производных данных, перезапустите и приветствуйте:)

0 голосов
/ 26 декабря 2016

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

0 голосов
/ 30 октября 2016

Если все правильно, но эта ошибка присутствует, необходимо проверить следующий раздел в файле ****. Vcxproj:

<ClCompile Include="stdafx.cpp">
  <PrecompiledHeader Condition=

В моем случае это было неверное имя конфигурации: только первое слово.

0 голосов
/ 05 марта 2014

Попробуйте Построить> Очистить решение, затем Построить> Построить решение. Это работает для меня.

...