#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 в приведенных ниже инструкциях. Прошу прощения. Это не моя вина.
- Щелкните правой кнопкой мыши на вашем проекте в обозревателе решений.
- Нажмите Свойства в нижней части выпадающего меню.
- В левом верхнем углу страниц свойств выберите все конфигурации из выпадающего меню.
- Откройте дерево C / C и выберите предварительно скомпилированные заголовки
- Предварительно скомпилированный заголовок: Выберите Использовать (/Yu)
- Заполните поле предварительно скомпилированного файла заголовка. Стандартным является stdafx.h
-
Нажмите Ok
-
Если у вас нет stdafx.h в ваших заголовочных файлах, поместите его туда. Отредактируйте его, чтобы #включить все заголовки, которые вы хотите предварительно скомпилировать.
- Поместите файл с именем stdafx.cpp в ваш проект. Поместите #include «stdafx.h» в начало этого, и ничего больше.
- Щелкните правой кнопкой мыши на stdafx.cpp в обозревателе решений. Выберите Свойства и все конфигурации снова, как на шаге 4…
- … но на этот раз выберите предварительно скомпилированный заголовок Create (/Yc).Это приведет только к привязке к одному файлу stdafx.cpp .
- Поместите #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:
Исправить:
-
Убедитесь, что у вас есть xxxxx.cpp в вашем проекте
-
Компиляция xxxxx.cpp с флагом /Yc (Создать предварительно скомпилированный заголовок)
(щелкните правой кнопкой мыши на xxxxx.cpp -> свойства -> Предварительно скомпилированные заголовки -> создать) -
Скомпилируйте все остальные файлы с флагом /Yu (Использовать предварительно скомпилированный заголовок)
(щелкните правой кнопкой мыши проект -> свойства -> Предварительно скомпилированные заголовки -> использовать)
Комментарии:
1. Это меня исправило. Большое вам спасибо!
Ответ №4:
- Щелкните правой кнопкой мыши на проекте и выберите пункт меню свойств
- переходим к C / C -> Предварительно скомпилированные заголовки
- Выберите Не использовать предварительно скомпилированные заголовки
Комментарии:
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.
Ответ №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
первый — это когда у меня возникла ошибка,
и изменил его как вторую картинку
Комментарии:
1. Я отклоняю это. В следующий раз рассмотрите возможность публикации на английском.
Ответ №13:
Ответ №14:
Если все правильно, но эта ошибка присутствует, необходимо проверить следующий раздел в файле ****.vcxproj:
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition=
В моем случае это было неправильное название конфигурации: только первое слово.