Как исправить отсутствие файла .pch при сборке?

#c #visual-studio #precompiled-headers #pch

#c #visual-studio #предварительно скомпилированные заголовки #pch

Вопрос:

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

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

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

Комментарии:

1. вы должны предоставить больше информации. какую именно ошибку вы получаете? как настроен ваш проект в данный момент?

2. Простая перестройка полностью устранила мою проблему.

Ответ №1:

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

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

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

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

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

Комментарии:

1. Я не знал stdafx.cpp должна быть другая настройка. Отличный ответ.

2. Это более простой ответ, чем мой. Для запуска PCH необходимы шаги 1-7, но сообщение об ошибке из вопроса указывает, что эти шаги уже были выполнены. OTOH, это предполагает наличие одного stdafx.pch файла, в то время как xxxxx.pch из вопроса намекает на более сложную проблему (настройка нескольких PCH).

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

Ответ №2:

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

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

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

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

Комментарии:

1. тогда, вероятно, отсутствует параметр /Yc: compiler. Кстати, опция находится на страницах свойств проекта / Свойства конфигурации / C-C / Предварительно скомпилированные заголовки

Ответ №3:

Исправить:

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

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

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

Комментарии:

1. Это меня исправило. Большое вам спасибо!

Ответ №4:

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

Комментарии:

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

2. 4. Выберите Create (/Yc) (для восстановления, а затем используйте его снова)

Ответ №5:

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

Ответ №6:

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

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

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

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

К счастью, это кому-то помогает.

Ответ №7:

VS screwed (мой — 2019;( ). Продолжайте и выберите «не использовать предварительно скомпилированные заголовки», как указывают другие ребята, затем откройте файл проекта (vcxproj) с помощью любого текстового редактора и удалите выделенные две записи в двух местах. Наслаждайтесь наведением порядка! На самом деле, запись ‘pch.h’ в файле vcxproj, которую вы видите ниже, вы когда-нибудь найдете в интерфейсах VS properties.

снимок из файла nnn.vcxproj

Ответ №8:

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

Ответ №9:

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

Комментарии:

1. Да, но первоначальный вопрос имел отношение к VS2008, а не к VS2015. Есть ли у вас какая-либо уверенность в том, что это решит проблему операционной системы?

2. Независимо от того, какая это версия VS, проблема по-прежнему возникает в разных сборках. Просто попробуйте это и посмотрите, работает ли это для любого из них, с которым вы имели бы дело.

Ответ №10:

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

Ответ №11:

Мне удалось создать эту проблему для себя, потому что я хотел использовать pch.h и pch.cpp файл из разных каталогов. Итак, я удалил два файла из своего проекта, а затем добавил их как существующие файлы откуда-то еще. Большая ошибка, поскольку предварительно скомпилированные заголовочные файлы больше не могут быть найдены.

Я не могу найти способа устранить проблему в пользовательском интерфейсе Visual Studio 2019. Вы должны отредактировать файл проекта и убедиться, что следующее выглядит следующим образом:

  <ClCompile Include="pch.cpp">
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
  </ClCompile>
  

Ответ №12:

У меня была такая же проблема, и мне удалось решить ее следующим образом:

ОШИБКА :

 fatal error C1083: Cannot open precompiled header file : "DebugmyProj.pch". No such file or directory
  

первый — это когда у меня возникла ошибка,

и изменил его как вторую картинку

  • make (/Yx)

  • myProj.h
    введите описание изображения здесь

Комментарии:

1. Я отклоняю это. В следующий раз рассмотрите возможность публикации на английском.

Ответ №13:

В моем случае необходимо было выбрать Create (/Yu) вместо стандартного Use (/Yu)
введите описание изображения здесь для
введите описание изображения здесь

Ответ №14:

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

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

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