Làm cách nào để sửa tệp .pch bị thiếu khi xây dựng?


164

Khi tôi xây dựng giải pháp c ++ của mình trong Visual Studio, nó phàn nàn rằng tệp xxxxx.pch bị thiếu. Có một cài đặt nào tôi đang thiếu để lấy lại các tiêu đề được biên dịch trước không?

Đây là lỗi chính xác cho sự hoàn chỉnh:

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

1
bạn phải cung cấp thêm thông tin lỗi chính xác là gì bạn đang nhận được? Dự án của bạn hiện đang được cấu hình như thế nào?
Assaf Lavie

Chỉ cần một đơn giản xây dựng lại tất cả đã khắc phục vấn đề của tôi.
De Khánh

Câu trả lời:


436

LƯU Ý: Các phiên bản sau của IDE có thể sử dụng "pch" thay vì "stdafx" trong tên mặc định cho các tệp liên quan. Có thể cần phải thay pch cho stdafx theo hướng dẫn bên dưới. Tôi xin lỗi. Đó không phải lỗi của tôi.

  1. Nhấp chuột phải vào dự án của bạn trong Solution Explorer.
  2. Nhấp vào Thuộc tính ở dưới cùng của menu thả xuống.
  3. Ở phía trên bên trái của Trang thuộc tính, chọn Tất cả Cấu hình từ menu thả xuống.
  4. Mở cây C / C ++ và chọn Tiêu đề được biên dịch sẵn
  5. Tiêu đề được biên dịch sẵn: Chọn Sử dụng (/ Yu)
  6. Điền vào trường Tệp được biên dịch sẵn. Tiêu chuẩn là stdafx.h
  7. Nhấp vào Được rồi

  8. Nếu bạn không có stdafx.h trong Tệp Tiêu đề của bạn, hãy đặt nó ở đó. Chỉnh sửa nó để # bao gồm tất cả các tiêu đề bạn muốn được biên dịch trước.

  9. Đặt một tệp có tên stdafx.cpp vào dự án của bạn. Đặt #include "stdafx.h" ở đầu của nó, và không có gì khác.
  10. Nhấp chuột phải vào stdafx.cpp trong Solution Explorer. Chọn Thuộc tính và Tất cả các cấu hình một lần nữa như trong bước 4 ...
  11. ... nhưng lần này, chọn Tiêu đề được tạo sẵn (/ Yc). Điều này sẽ chỉ liên kết với một tập tin stdafx.cpp.
  12. Đặt #include "stdafx.h" ở đầu tất cả các tệp nguồn của bạn.

May mắn 13. Bắt chéo ngón tay của bạn và nhấn Build.


58
Tôi không biết stdafx.cpp nên có cài đặt khác. Câu trả lời chính xác.
chuyên gia

5
Đây phải là câu trả lời được chấp nhận, vì câu hỏi còn lại thiếu các bước 10 và 11. Cảm ơn!
JBentley

2
Đây là một câu trả lời cơ bản hơn của tôi. Bước 1-7 là cần thiết để PCH hoạt động, nhưng thông báo lỗi từ câu hỏi cho biết các bước đó đã được thực hiện. OTOH, nó giả sử một stdafx.pchtệp duy nhất , trong khi xxxxx.pchcâu hỏi gợi ý về một vấn đề phức tạp hơn (thiết lập nhiều PCH).
MSalters

1
Câu trả lời này thực sự tiết kiệm trong ngày. Cảm ơn.
Matt Craig

Cảm ơn ngài! Quay trở lại nguồn gốc C / C ++ của tôi cho một dự án mới và tôi cảm thấy giống như một chút hào hứng
Colby Châu Phi

59

Sử dụng Preeriled Header (pch) là một quá trình gồm hai bước.

Ở bước một, bạn biên dịch một tệp sơ khai (Trong VS200x, nó thường được gọi stdafx.cpp. Các phiên bản mới hơn sử dụng pch.cpp.). Tệp sơ khai này gián tiếp chỉ bao gồm các tiêu đề bạn muốn được biên dịch trước. Thông thường, một tiêu đề nhỏ (thường stdafx.hhay pch.hpp) danh sách tiêu đề chuẩn như <iostream><string>, và sau đó này được bao gồm trong các tập tin còn sơ khai. Biên dịch này tạo ra tệp .pch.

Trong bước 2, mã nguồn thực tế của bạn bao gồm cùng một tiêu đề nhỏ từ bước 1 như tiêu đề đầu tiên. Trình biên dịch, khi nó gặp tiêu đề đặc biệt này, thay vào đó sẽ đọc tệp .pch tương ứng. Điều đó có nghĩa là nó không phải (biên dịch lại) các tiêu đề đó mỗi lần.

Trong trường hợp của bạn, có vẻ như bước 1 thất bại. Là tập tin sơ khai vẫn còn hiện diện? Trong trường hợp của bạn, điều đó có thể sẽ được xxxxx.cpp. Nó phải là một tệp được biên dịch cùng /Yc:xxxxx.pch, vì đó là cờ trình biên dịch để chỉ ra đó là bước 1 của quy trình PCH. Nếu xxxxx.cppcó, và là một tệp sơ khai như vậy, thì có lẽ nó thiếu /Yc:tùy chọn trình biên dịch.


13
thì có lẽ nó thiếu tùy chọn trình biên dịch / Yc :. Nhân tiện, tùy chọn này nằm trong Trang thuộc tính dự án / Thuộc tính cấu hình / C-C ++ / Tiêu đề được biên dịch sẵn
xóa

22

Sửa chữa:

  1. Hãy chắc chắn rằng bạn có xxxxx.cpp trong dự án của bạn

  2. Biên dịch xxxxx.cpp với cờ / Yc ( Tạo tiêu đề được biên dịch trước)
    (nhấp chuột phải vào xxxxx.cpp -> thuộc tính -> Tiêu đề được biên dịch trước -> tạo )

  3. Biên dịch tất cả các tệp khác bằng / Yu cờ ( Sử dụng Tiêu đề được biên dịch trước)
    (nhấp chuột phải vào dự án -> thuộc tính -> Tiêu đề được biên dịch trước -> sử dụng )


Điều này cố định tôi lên. Cảm ơn rât nhiều!
CharlesW

7
  1. Nhấp chuột phải vào dự án và chọn mục menu thuộc tính
  2. goto C / C ++ -> Tiêu đề được biên dịch sẵn
  3. Chọn Không sử dụng Tiêu đề được biên dịch sẵn

Điều này làm việc cho tôi. Tôi đã xóa "stdafx.cpp", sau đó khi tôi thêm lại, lỗi này sẽ không biến mất cho đến khi tôi tắt các tiêu đề được biên dịch trước. Dù sao thì dự án này rất nhỏ, vì vậy nó không khác biệt nhiều so với tốc độ.
Contango

3
4. ChọnCreate (/Yc) (để khôi phục và sau đó sử dụng lại)
Bitterblue

2

Có, nó có thể được loại bỏ với các tùy chọn / Yc như những người khác đã chỉ ra nhưng rất có thể bạn sẽ không cần phải chạm vào nó để sửa nó. Tại sao bạn nhận được lỗi này ở nơi đầu tiên mà không thay đổi bất kỳ cài đặt nào? Bạn có thể đã 'dọn dẹp' dự án và hơn là cố gắng biên dịch một tệp cpp. Bạn sẽ gặp lỗi này trong trường hợp đó vì tiêu đề tiền biên dịch hiện bị thiếu. Chỉ cần xây dựng toàn bộ dự án (ngay cả khi không thành công) và hơn là xây dựng bất kỳ tệp cpp nào và bạn sẽ không gặp phải lỗi này.


2

Trong trường hợp điều này xảy ra với bạn trên bản dựng máy chủ (AppCenter) và người sử dụng sử dụng CocoaPods, hãy đảm bảo rằng Podfile của bạn đã được đăng ký.

AppCenter chỉ chạy lệnh "pod install" nếu nó tìm thấy Pofile và nó KHÔNG tìm thấy thư mục PODS trên các tệp.

Tôi đã đăng ký thư mục, nhưng vì git tự động bỏ qua các tệp .pch (kiểm tra bạn .gitignore để rất tốt điều này), .pch của tôi không được kiểm tra.

Tôi đã sắp xếp vấn đề của mình bằng cách buộc các tệp .pch kiểm tra nó, nhưng Xóa thư mục PODS cũng sẽ hoạt động, vì Appcenter sẽ chạy lệnh pod install trong trường hợp đó.

Hy vọng điều này sẽ giúp ai đó.


0

Nếu mọi thứ đều đúng, nhưng lỗi này là hiện tại, nó cần kiểm tra phần tiếp theo trong tệp ****. Vcxproj:

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

Trong trường hợp của tôi, nó có một tên cấu hình không chính xác: chỉ từ đầu tiên.


0

Tôi biết chủ đề này rất cũ, nhưng tôi đã xử lý vấn đề này trong VS2015 gần đây và điều giúp ích là xóa các thư mục xây dựng và xây dựng lại nó. Điều này có thể xảy ra do cố gắng đóng chương trình hoặc chương trình tạm dừng / đóng băng VS trong khi xây dựng.


Có, nhưng câu hỏi ban đầu phải làm với VS2008, không phải VS2015. Bạn có chắc chắn rằng điều này sẽ giải quyết vấn đề của OP không?
T-Heron

Bất kể đó là phiên bản VS nào, vấn đề vẫn xảy ra trên các bản dựng khác nhau. Chỉ cần thử điều đó và xem nếu nó hoạt động cho bất cứ ai bạn đang đối phó.
glover12

0

Tôi đã tìm kiếm tệp PCH iOS có cùng một vấn đề, nếu bạn cũng ở đây giống tôi, giải pháp mà tôi đã tìm thấy là bằng cách xóa dữ liệu dẫn xuất; Đóng Trình mô phỏng, đi đến xCode prefs -> vị trí -> đi đến đường dẫn tệp dữ liệu dẫn xuất, đóng xCode, xóa các tệp trong thư mục dữ liệu dẫn xuất, khởi chạy lại và chúc mừng :)


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.