Як виправити .pch файл відсутній у збірці?


164

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

ось точна помилка повноти:

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

1
ви повинні надати більше інформації. яку саме помилку ви отримуєте? як налаштований ваш проект на даний момент?
Ассаф Лаві

Просто проста перебудова все вирішила мою проблему.
Декін

Відповіді:


436

ПРИМІТКА. Більш пізні версії IDE можуть використовувати "pch", а не "stdafx" в іменах за замовчуванням для пов'язаних файлів. Можливо, буде потрібно замінити pch на stdafx у наведених нижче інструкціях. Я прошу вибачення. Це не моя вина.

  1. Клацніть правою кнопкою миші ваш проект у Провіднику рішень.
  2. Клацніть Властивості внизу спадного меню.
  3. У верхньому лівому куті сторінок властивостей виберіть Усі конфігурації зі спадного меню.
  4. Відкрийте дерево C / C ++ і виберіть попередньо складені заголовки
  5. Попередньо складений заголовок: Оберіть Використовувати (/ Ю)
  6. Заповніть поле заздалегідь складеного файлу заголовка. Стандартним є stdafx.h
  7. Клацніть Гаразд

  8. Якщо у файлах заголовка у вас немає stdafx.h, покладіть його туди. Відредагуйте його, щоб #including всі заголовки, які ви хочете попередньо скласти.

  9. Додайте файл під назвою stdafx.cpp у свій проект. Помістіть #include "stdafx.h" вгорі, і більше нічого.
  10. Клацніть правою кнопкою миші на stdafx.cpp в Провіднику рішень. Виберіть "Властивості" та "Усі конфігурації" знову, як на кроці 4 ...
  11. ... але цього разу виберіть попередньо складений заголовок Створити (/ Yc). Це пов'язуватиметься лише з одним файлом stdafx.cpp.
  12. Помістіть #include "stdafx.h" в самому верху всіх вихідних файлів.

Пощастило 13. схрестіть пальці і натисніть Build.


58
Я не знав, що stdafx.cpp повинен мати різні налаштування. Чудова відповідь.
експерт

5
Це має бути прийнятою відповіддю, оскільки в іншому немає пунктів 10 та 11. Дякую!
JBentley

2
Це більш основна відповідь, ніж моя. Крок 1-7 необхідний для роботи ПКН, але повідомлення про помилку з питання вказує на те, що ці кроки вже зроблені. Щодо OTOH, він передбачає один stdafx.pchфайл, в той час xxxxx.pchяк запитання натякає на складнішу проблему (налаштування декількох PCH).
MSalters

1
Ця відповідь справді врятувала день. Дякую.
Метт Крейг

Дякую вам сер! Повернувшись до свого коріння C / C ++ r для нового проекту, я відчуваю себе трохи спазом
Колбі Африка

59

Використання попередньо складеного заголовка (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:варіант компілятора.


13
то, ймовірно, відсутній варіант / компілятор Yc:. До речі, параметр розміщений у Сторінках властивостей проекту / Властивості конфігурації / C-C ++ / Попередньо складені заголовки
відімкніть

22

Виправити:

  1. Переконайтеся, що у вашому проекті є xxxxx.cpp

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

  3. Скомпілюйте всі інші файли з прапором / Yu ( Використовуйте попередньо складений заголовок)
    (клацніть правою кнопкою миші на проект -> властивості -> Заздалегідь складені заголовки -> використання )


Це мене виправило. Велике спасибі!
CharlesW

7
  1. Клацніть правою кнопкою миші на проект та виберіть пункт меню властивості
  2. goto C / C ++ -> попередньо складені заголовки
  3. Виберіть Не використовувати попередньо складені заголовки

Це працювало для мене. Я видалив "stdafx.cpp", тоді, коли я додав його назад, ця помилка не піде, поки я не вимкну попередньо складені заголовки. Проект все одно крихітний, тому його не так, якби він значно впливає на швидкість.
Контанго

3
4. ВиберітьCreate (/Yc) (відновити та знову використати його)
Bitterblue

2

Так, його можна усунути за допомогою параметрів / Yc, як вказали інші, але, швидше за все, вам не потрібно буде доторкатися до цього, щоб виправити це. Чому ви отримуєте цю помилку в першу чергу, не змінюючи жодних налаштувань? Можливо, ви «очистили» проект і, ніж спробувати скласти один файл cpp. У цьому випадку ви отримаєте цю помилку, оскільки заголовок прекомпілятора відсутній. Просто побудуйте весь проект (навіть якщо це не вдалося), а потім складіть будь-який єдиний файл cpp, і ви не отримаєте цю помилку.


2

У випадку, якщо це трапляється з вами на складанні сервера (AppCenter) і ви користуєтесь CocoaPods, переконайтеся, що ваш Podfile зареєстрований.

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

У мене була зареєстрована папка, але оскільки git автоматично ігнорує .pch файли (перевіряйте. Gitignore, щоб це дуже підтвердити), мій .pch не перевірявся.

Я сортував свою проблему, змусивши файли .pch перевірити її, але видалення папки PODS теж повинно працювати, оскільки в цьому випадку Appcenter запустить команду встановлення pod.

Сподіваємось, це комусь допомагає.


0

Якщо все правильно, але ця помилка присутня, потрібно перевірити наступний розділ у ****. Файл vcxproj:

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

У моєму випадку це була неправильна назва конфігурації: лише перше слово.


0

Я знаю, що ця тема дуже давня, але я нещодавно займався цим у VS2015, і це допомогло видалити папки для збирання та відновити її. Це може статися через спробу закрити програму або зупинити / заморозити програму VS під час створення.


Так, але оригінальне запитання стосувалося VS2008, а не VS2015. Чи є у вас певність, що це вирішило б проблему ОП?
T-Heron

Незалежно від версії VS, проблема все ще виникає в різних версіях. Просто спробуйте це і подивіться, чи працює він для того, з ким би ви мали справу.
glover12

0

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.