Bagaimana cara memperbaiki file .pch yang hilang saat dibangun?

164

Ketika saya membangun solusi c ++ saya di Visual Studio mengeluh bahwa file xxxxx.pch hilang. Apakah ada pengaturan yang saya lewatkan untuk mendapatkan kembali header yang telah dikompilasi?

di sini adalah kesalahan yang tepat untuk kelengkapan:

Error   1   fatal error C1083: Cannot open precompiled header file: 'Debug\xxxxx.pch': No such file or directory
Sam Mackrill
sumber
1
Anda harus memberikan info lebih lanjut. kesalahan apa yang sebenarnya Anda dapatkan? bagaimana proyek Anda saat ini dikonfigurasi?
Assaf Lavie
Hanya yang sederhana membangun kembali semua memperbaiki masalah saya.
Deqing

Jawaban:

436

CATATAN: Versi selanjutnya dari IDE dapat menggunakan "pch" daripada "stdafx" dalam nama default untuk file terkait. Mungkin perlu untuk mengganti pd untuk stdafx dalam instruksi di bawah ini. Saya minta maaf. Itu bukan salahku.

  1. Klik kanan pada proyek Anda di Solution Explorer.
  2. Klik Properties di bagian bawah menu drop-down.
  3. Di kiri atas Halaman Properti, pilih Semua Konfigurasi dari menu drop-down.
  4. Buka pohon C / C ++ dan pilih Precompiled Headers
  5. Header Terkompilasi: Pilih Gunakan (/ Yu)
  6. Isi bidang File Header Terkompilasi. Standarnya adalah stdafx.h
  7. Klik Oke

  8. Jika Anda tidak memiliki stdafx.h di File Header Anda taruh di sana. Edit untuk memasukkan semua header yang ingin dikompilasi.

  9. Masukkan file bernama stdafx.cpp ke proyek Anda. Masukkan #include "stdafx.h" di atasnya, dan tidak ada yang lain.
  10. Klik kanan pada stdafx.cpp di Solution Explorer. Pilih Properties dan Semua konfigurasi lagi seperti pada langkah 4 ...
  11. ... tapi kali ini pilih Precompiled Header Create (/ Yc). Ini hanya akan mengikat ke satu file stdafx.cpp.
  12. Masukkan #include "stdafx.h" di bagian paling atas dari semua file sumber Anda.

Beruntung 13. Silangkan jari Anda dan tekan Build.

Jive Dadson
sumber
58
Saya tidak tahu stdafx.cpp harus memiliki pengaturan yang berbeda. Jawaban yang bagus
ahli
5
Ini harus menjadi jawaban yang diterima, karena yang lain hilang langkah 10 dan 11. Terima kasih!
JBentley
2
Ini adalah jawaban yang lebih mendasar daripada jawaban saya. Langkah 1-7 diperlukan agar PCH berfungsi, tetapi pesan kesalahan dari pertanyaan menunjukkan bahwa langkah-langkah tersebut telah dilakukan. OTOH, itu mengasumsikan satu stdafx.pchfile, sedangkan xxxxx.pchdari pertanyaan mengisyaratkan masalah yang lebih kompleks (pengaturan multi-PCH).
MSalters
1
Jawaban ini benar-benar menyelamatkan hari itu. Terima kasih.
Matt Craig
Terima kasih Pak! Kembali ke akar C / C ++ r saya untuk proyek baru dan saya merasa sedikit kesulitan
Colby Africa
59

Penggunaan Precompiled Header (pch) adalah proses dua langkah.

Pada langkah pertama, Anda mengkompilasi file rintisan (Dalam VS200x biasanya disebut stdafx.cpp. Versi yang lebih baru digunakan pch.cpp.). File rintisan ini secara tidak langsung hanya menyertakan header yang ingin Anda kompilasi. Biasanya, satu tajuk kecil (biasanya stdafx.hatau pch.hpp) mencantumkan tajuk standar seperti <iostream>dan <string>, dan ini kemudian disertakan dalam file rintisan. Kompilasi ini membuat file .pch.

Pada langkah 2, kode sumber Anda yang sebenarnya menyertakan header kecil yang sama dari langkah 1 sebagai header pertama. Compiler, ketika bertemu header khusus ini, membaca file .pch yang sesuai sebagai gantinya. Itu berarti ia tidak harus (kembali) mengkompilasi header standar itu setiap waktu.

Dalam kasus Anda, sepertinya langkah 1 gagal. Apakah file rintisan masih ada? Dalam kasus Anda, itu mungkin saja xxxxx.cpp. Itu harus berupa file yang dikompilasi /Yc:xxxxx.pch, karena itulah flag kompiler untuk mengindikasikan langkah 1 dari proses PCH. Jika xxxxx.cppada, dan ini adalah file rintisan, maka kemungkinan /Yc:opsi kompilernya hilang .

MSalters
sumber
13
maka itu mungkin kehilangan opsi / Yc: compilernya. Omong-omong, opsi terletak di Halaman Properti Proyek / Properti Konfigurasi / C-C ++ / Header Terkompilasi
wip
22

Memperbaiki:

  1. Pastikan Anda memiliki xxxxx.cpp di proyek Anda

  2. Kompilasi xxxxx.cpp dengan flag / Yc ( Buat Header Terkompilasi)
    (klik kanan pada xxxxx.cpp -> properties -> Header Terkompilasi -> buat )

  3. Kompilasi semua file lainnya dengan / Yu flag ( Use Precompiled Header)
    (klik kanan pada project -> properties -> Precompiled Headers -> use )

franckspike
sumber
Ini memperbaiki saya. Terima kasih banyak!
CharlesW
7
  1. Klik kanan ke proyek dan pilih item menu properti
  2. goto C / C ++ -> Header Terkompilasi
  3. Pilih Tidak Menggunakan Tajuk Terkompilasi
jpabess
sumber
Ini berhasil untuk saya. Saya telah menghapus "stdafx.cpp", kemudian ketika saya menambahkannya kembali, kesalahan ini tidak akan hilang sampai saya mematikan header yang sudah dikompilasi sebelumnya. Proyek ini memang kecil, jadi itu tidak seperti membuat banyak perbedaan dengan kecepatan.
Contango
3
4. PilihCreate (/Yc) (untuk mengembalikan dan kemudian menggunakannya lagi)
Bitterblue
2

Ya itu bisa dihilangkan dengan opsi / Yc seperti yang ditunjukkan orang lain tetapi kemungkinan besar Anda tidak perlu menyentuhnya untuk memperbaikinya. Mengapa Anda mendapatkan kesalahan ini sejak awal tanpa mengubah pengaturan apa pun? Anda mungkin telah 'membersihkan' proyek dan mencoba mengkompilasi satu file cpp. Anda akan mendapatkan kesalahan ini dalam kasus itu karena header precompiler sekarang hilang. Hanya membangun seluruh proyek (bahkan jika tidak berhasil) dan daripada membangun file cpp tunggal dan Anda tidak akan mendapatkan kesalahan ini.

zar
sumber
2

Dalam hal ini terjadi pada Anda pada server build (AppCenter) dan Anda menggunakan CocoaPods memastikan bahwa Podfile Anda masuk.

AppCenter hanya menjalankan perintah "pod install" jika menemukan Pofile dan TIDAK menemukan folder PODS pada file.

Saya mempunyai folder yang di-check-in, tetapi karena git secara otomatis mengabaikan file .pch (periksa Anda .gitignore untuk mempercayakan ini), .pch saya tidak diperiksa.

Saya mengurutkan masalah saya dengan memaksa file .pch untuk memeriksanya, tetapi menghapus folder PODS juga akan berhasil, karena Appcenter akan menjalankan perintah instal pod dalam kasus itu.

Untungnya ini membantu seseorang.

Marco Leite
sumber
0

Jika semuanya benar, tetapi kesalahan ini ada, ia perlu memeriksa bagian selanjutnya dalam file ****. Vcxproj:

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

Dalam kasus saya itu ada nama yang salah dari konfigurasi: hanya kata pertama.

Sergey ArcTechno
sumber
0

Saya tahu topik ini sudah sangat lama, tetapi saya sedang membahas ini di VS2015 baru-baru ini dan yang membantu adalah menghapus folder build dan membangunnya kembali. Ini mungkin terjadi karena mencoba untuk menutup program atau menghentikan / membekukan VS sementara membangun.

glover12
sumber
Ya, tapi pertanyaan aslinya ada hubungannya dengan VS2008, bukan VS2015. Apakah Anda memiliki kepastian bahwa ini akan menyelesaikan masalah OP?
T-Heron
Terlepas dari apa versi VS itu, masalahnya masih terjadi di berbagai build. Coba saja dan lihat apakah itu berhasil untuk apa pun yang akan Anda hadapi.
glover12
0

Saya sedang mencari file iOS PCH yang memiliki masalah yang sama, jika Anda tiba di sini seperti saya juga, solusi yang saya temukan adalah dengan membersihkan data yang diturunkan; Tutup Simulator, buka prefac xCode -> lokasi -> buka jalur data file turunan, tutup xCode, hapus file-file di folder data turunan, luncurkan kembali dan tepuk tangan :)

Ahmed Awad
sumber
-1

Coba Bangun> Bersihkan Solusi, lalu Bangun> Bangun Solusi. Ini bekerja untuk saya.

Nick Dong
sumber