วิธีแก้ไขไฟล์. 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
คุณต้องให้ข้อมูลเพิ่มเติม คุณได้รับข้อผิดพลาดอะไร โครงการของคุณมีการกำหนดค่าอย่างไร
Assaf Lavie

เพียงแค่สร้างใหม่ง่าย ๆ ทั้งหมดแก้ไขปัญหาของฉัน
Deqing

คำตอบ:


436

หมายเหตุ: IDE รุ่นที่ใหม่กว่าอาจใช้ "pch" แทน "stdafx" ในชื่อเริ่มต้นสำหรับไฟล์ที่เกี่ยวข้อง อาจจำเป็นต้องแทนที่ pch สำหรับ stdafx ตามคำแนะนำด้านล่าง ฉันขอโทษ. มันไม่ได้เป็นความผิดของฉัน.

  1. คลิกขวาที่โครงการของคุณใน Solution Explorer
  2. คลิกคุณสมบัติที่ด้านล่างของเมนูแบบเลื่อนลง
  3. ที่ด้านบนซ้ายของหน้าคุณสมบัติเลือกการกำหนดค่าทั้งหมดจากเมนูแบบเลื่อนลง
  4. เปิดแผนผัง C / C ++ และเลือก Precompiled Headers
  5. ส่วนหัวที่ประกอบไว้ล่วงหน้า: เลือกใช้ (/ Yu)
  6. กรอกข้อมูลลงในฟิลด์ไฟล์ส่วนหัวที่คอมไพล์แล้ว มาตรฐานคือ stdafx.h
  7. คลิกตกลง

  8. หากคุณไม่มี stdafx.h ในไฟล์ส่วนหัวของคุณให้วางไว้ที่นั่น แก้ไขเป็น #include ส่วนหัวทั้งหมดที่คุณต้องการคอมไพล์ล่วงหน้า

  9. วางไฟล์ชื่อ stdafx.cpp ในโครงการของคุณ วาง #include "stdafx.h" ไว้ที่ด้านบนสุดแล้วไม่มีอะไรอื่นอีก
  10. คลิกขวาที่ stdafx.cpp ใน Solution Explorer เลือกคุณสมบัติและการกำหนดค่าทั้งหมดอีกครั้งในขั้นตอนที่ 4 ...
  11. ... แต่ในเวลานี้เลือกสร้างส่วนหัวล่วงหน้า (/ Yc) สิ่งนี้จะผูกกับไฟล์เดียว stdafx.cpp
  12. ใส่ #include "stdafx.h" ที่ด้านบนสุดของไฟล์ต้นฉบับทั้งหมดของคุณ

โชคดี 13. ข้ามนิ้วของคุณแล้วกด Build


58
ฉันไม่ทราบว่า stdafx.cpp ควรมีการตั้งค่าที่แตกต่างกัน คำตอบที่ดี
ผู้เชี่ยวชาญ

5
นี่ควรเป็นคำตอบที่ได้รับการยอมรับเนื่องจากอีกอันหนึ่งไม่มีขั้นตอนที่ 10 และ 11 ขอบคุณ!
JBentley

2
นี่เป็นคำตอบพื้นฐานมากกว่าของฉัน ขั้นตอนที่ 1-7 จำเป็นต่อการทำให้ PCH ทำงานได้ แต่ข้อความแสดงข้อผิดพลาดจากคำถามระบุว่าขั้นตอนเหล่านั้นได้ดำเนินการไปแล้ว OTOH จะถือว่าstdafx.pchไฟล์เดียวในขณะxxxxx.pchที่คำถามจากคำใบ้ปัญหาที่ซับซ้อนมากขึ้น (การตั้งค่าหลาย PCH)
MSalters

1
คำตอบนี้ช่วยได้ทั้งวัน ขอบคุณ
Matt Craig

ขอบคุณครับ! กลับไปที่รูท C / C ++ ของฉันสำหรับโปรเจ็กต์ใหม่และฉันรู้สึกเหมือนเป็นคนขี้เกียจนิดหน่อย
Colby Africa

59

การใช้ส่วนหัว Precompiled (pch) เป็นกระบวนการสองขั้นตอน

ในขั้นตอนที่หนึ่งคุณจะทำการคอมไพล์ไฟล์ stub (โดยปกติแล้วจะเรียกว่า VS200x stdafx.cppเวอร์ชั่นที่ใหม่กว่าใช้pch.cpp) ไฟล์สตับนี้ทางอ้อมมีเฉพาะส่วนหัวที่คุณต้องการคอมไพล์ล่วงหน้า โดยทั่วไปส่วนหัวขนาดเล็กหนึ่ง (โดยปกติstdafx.hหรือpch.hpp) จะแสดงรายการส่วนหัวมาตรฐานเช่น<iostream>และ<string>และจากนั้นจะรวมอยู่ในไฟล์ stub การคอมไพล์นี่เป็นการสร้างไฟล์. pch

ในขั้นตอนที่ 2 รหัสแหล่งที่มาจริงของคุณมีส่วนหัวขนาดเล็กเดียวกันจากขั้นตอนที่ 1 เป็นส่วนหัวแรก คอมไพเลอร์เมื่อพบส่วนหัวพิเศษนี้อ่านไฟล์. pch ที่เกี่ยวข้องแทน นั่นหมายความว่าไม่จำเป็นต้องรวบรวมหัวมาตรฐานเหล่านั้นทุกครั้ง

ในกรณีของคุณดูเหมือนว่าขั้นตอนที่ 1 ล้มเหลว ไฟล์สตับยังคงปรากฏอยู่หรือไม่? xxxxx.cppในกรณีของคุณที่อาจจะ มันจะต้องเป็นไฟล์ที่คอมไพล์ด้วย/Yc:xxxxx.pchเนื่องจากเป็นแฟล็กคอมไพเลอร์เพื่อระบุว่าเป็นขั้นตอนที่ 1 ของกระบวนการ PCH หากxxxxx.cppมีอยู่และเป็นไฟล์ stub เช่นนั้นอาจเป็นเพราะ/Yc:ตัวเลือกคอมไพเลอร์ขาดหายไป


13
ดังนั้นอาจเป็นไปได้ว่าตัวเลือก / Yc: compiler หายไป โดยวิธีการที่ตัวเลือกจะอยู่ในหน้าคุณสมบัติโครงการ / คุณสมบัติการกำหนดค่า / C-C ++ / ส่วนหัวคอม
ไพล์แล้ว

22

การแก้ไข:

  1. ตรวจสอบให้แน่ใจว่าคุณมี xxxxx.cpp ในโครงการของคุณ

  2. คอมไพล์xxxxx.cppพร้อมกับแฟล็ก / Yc ( สร้างส่วนหัวที่คอมไพล์แล้วล่วงหน้า )
    (คลิกขวาที่ xxxxx.cpp -> คุณสมบัติ -> ส่วนหัวที่คอมไพล์แล้ว-> สร้าง )

  3. คอมไพล์ไฟล์อื่น ๆ ทั้งหมดด้วยแฟล็ก/ Yu ( ใช้ส่วนหัว Precompiled)
    (คลิกขวาที่โครงการ -> Properties -> ส่วนหัว Precompiled -> use )


สิ่งนี้ทำให้ฉันหมดแรง ขอบคุณมาก!
CharlesW

7
  1. คลิกขวาที่โครงการและเลือกรายการเมนูคุณสมบัติ
  2. goto C / C ++ -> ส่วนหัวที่คอมไพล์แล้ว
  3. เลือกไม่ใช้ส่วนหัวประกอบล่วงหน้า

สิ่งนี้ใช้ได้สำหรับฉัน ฉันลบ "stdafx.cpp" แล้วเมื่อฉันเพิ่มกลับข้อผิดพลาดนี้จะไม่หายไปจนกว่าฉันจะปิดส่วนหัวที่คอมไพล์แล้ว โครงการมีขนาดเล็กอยู่แล้วดังนั้นจึงไม่เหมือนกับว่ามันสร้างความแตกต่างอย่างมากต่อความเร็ว
Contango

3
4. เลือกCreate (/Yc) (เพื่อกู้คืนจากนั้นใช้อีกครั้ง)
Bitterblue

2

ใช่สามารถลบออกได้ด้วยตัวเลือก / Yc เหมือนที่คนอื่น ๆ ชี้ แต่ส่วนใหญ่คุณไม่จำเป็นต้องแตะเพื่อแก้ไข ทำไมคุณถึงได้รับข้อผิดพลาดนี้ตั้งแต่แรกโดยไม่เปลี่ยนการตั้งค่าใด ๆ คุณอาจได้ 'ทำความสะอาด' โครงการและพยายามรวบรวมไฟล์ cpp ไฟล์เดียว คุณจะได้รับข้อผิดพลาดนี้ในกรณีนั้นเนื่องจากส่วนหัว precompiler หายไป เพียงสร้างโครงการทั้งหมด (แม้ว่าจะไม่สำเร็จ) และสร้างไฟล์ cpp ไฟล์เดียวและคุณจะไม่ได้รับข้อผิดพลาดนี้


2

ในกรณีนี้เกิดขึ้นกับคุณในการสร้างเซิร์ฟเวอร์ (AppCenter) และ yo uaer โดยใช้ CocoaPods ให้แน่ใจว่า Podfile ของคุณได้รับการตรวจสอบแล้ว

AppCenter รันคำสั่ง "pod install" เท่านั้นหากพบ Pofile และไม่พบโฟลเดอร์ PODS ในไฟล์

ฉันมีโฟลเดอร์ที่ถูกเช็คอิน แต่เนื่องจากคอมไพล์ละเว้นไฟล์. pch โดยอัตโนมัติ (ตรวจสอบคุณ. gitignore ถึงสิ่งนี้มาก), .pch ของฉันไม่ได้ทำการเช็คอิน

ฉันเรียงลำดับปัญหาของฉันโดยบังคับให้ไฟล์. pch ตรวจสอบ แต่การลบโฟลเดอร์ PODS ควรทำงานเช่นกันเนื่องจาก Appcenter จะเรียกใช้คำสั่ง pod install ในกรณีนั้น

นี่เป็นสิ่งที่ช่วยให้ใครบางคน


0

หากทุกอย่างถูกต้อง แต่ข้อผิดพลาดนี้มีอยู่ต้องตรวจสอบหัวข้อถัดไปใน **** ไฟล์ vcxproj:

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

ในกรณีของฉันมันมีชื่อของการกำหนดค่าที่ไม่ถูกต้อง: คำแรกเท่านั้น


0

ฉันรู้ว่าหัวข้อนี้เก่ามาก แต่เมื่อไม่นานมานี้ฉันได้จัดการกับเรื่องนี้ใน VS2015 และสิ่งที่ช่วยได้คือการลบโฟลเดอร์ build และสร้างใหม่อีกครั้ง สิ่งนี้อาจเกิดขึ้นเนื่องจากการพยายามปิดโปรแกรมหรือโปรแกรมหยุด / หยุดการทำงาน VS ขณะกำลังสร้าง


ใช่ แต่คำถามเดิมเกี่ยวข้องกับ VS2008 ไม่ใช่ VS2015 คุณมีความมั่นใจหรือไม่ว่านี่จะช่วยแก้ปัญหา OP
T-Heron

ไม่ว่าเวอร์ชัน VS คืออะไรปัญหายังคงเกิดขึ้นในบิลด์ต่าง ๆ ลองใช้ดูและดูว่ามันใช้ได้ผลกับสิ่งที่คุณต้องการหรือไม่
glover12

0

ฉันกำลังค้นหาไฟล์ iOS PCH ที่มีปัญหาเดียวกันถ้าคุณมาที่นี่เหมือนฉันเช่นกันโซลูชันที่ฉันพบคือการล้างข้อมูลที่ได้รับ ปิดตัวจำลองไปที่ค่า xCode -> ตำแหน่ง -> ไปที่เส้นทางของไฟล์ข้อมูลที่ได้รับปิด xCode ลบไฟล์ในโฟลเดอร์ข้อมูลที่ได้รับจากการเปิดตัวและไชโย :)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.