Tệp Prefix.pch trong Xcode là gì?


100

Vì vậy, nhiều nhà phát triển đang thêm các macro tiện lợi khác nhau vào Prefix.pch. Nhưng câu hỏi của tôi là Prefix.pchtập tin đó là gì .

  • Nếu tôi xóa Prefix.pchtệp đó khỏi tệp của mình Xcode, thì ứng dụng của tôi có chạy không? Hay nó sẽ hiển thị bất kỳ lỗi nào? Hay nó sẽ bị sập trong quá trình xây dựng?

  • Làm cách nào tôi có thể chạy ứng dụng của mình mà không có Prefix.pchtệp


Câu trả lời:


117

Tiêu đề được biên dịch trước.

Nó là gì?

A Prefix.pchlà một tiêu đề được biên dịch trước. Các tiêu đề được biên dịch trước đã được phát minh để giúp việc biên dịch nhanh hơn . Thay vì phân tích lặp đi lặp lại các tệp tiêu đề giống nhau, các tệp này được phân tích cú pháp một lần, trước thời hạn.

Xcode

Trong Xcode, bạn thêm nhập các tệp tiêu đề mà bạn muốn vào “tiêu đề tiền tố” và bật Precompile Prefix Headerđể chúng được biên dịch trước. Nhưng ý tưởng đằng sau tiêu đề tiền tố khác với việc biên dịch trước.

Tiêu đề tiền tố được bao gồm một cách hoàn toàn ở đầu mỗi tệp nguồn. Nó giống như mỗi tệp nguồn thêm vào

#import "Prefix.pch"

ở đầu tệp, trước bất kỳ thứ gì khác.

Loại bỏ nó.

Bạn có thể xóa tiêu đề được biên dịch trước. Câu hỏi này đã được trả lời trong chủ đề tôi đang liên kết bên dưới. Nó chứa tất cả thông tin bạn cần cũng như những bình luận hữu ích.

Có thể xóa tệp Prefix.pch khỏi dự án Xcode không?


24

Tệp Prefix.pch là gì?

A .pch là một tiêu đề được biên dịch trước.

Trong ngôn ngữ lập trình C và C ++, tệp tiêu đề là tệp mà văn bản của nó có thể được bộ tiền xử lý C tự động đưa vào tệp nguồn khác, thường được chỉ định bằng cách sử dụng chỉ thị trình biên dịch trong tệp nguồn.

Các tiêu đề tiền tố được biên dịch và lưu trữ trong bộ nhớ cache, sau đó được tự động đưa vào mọi tệp trong quá trình biên dịch. Điều này có thể tăng tốc độ biên dịch và cho phép bạn bao gồm tệp mà không cần thêm câu lệnh nhập vào mọi tệp sử dụng tệp đó. Chúng không được yêu cầu và thực sự làm chậm quá trình biên dịch bất cứ khi nào bạn thay đổi chúng.

Có, bạn có thể biên dịch và chạy dự án mà không cần tệp .pch

Trong Xcode, đi tới cài đặt bản dựng của mục tiêu (Command-Option-E, tab bản dựng) và bỏ chọn Tiêu đề tiền tố biên dịch trước (GCC_PRECOMPILE_PREFIX_HEADER). Bạn cũng có thể xóa giá trị của cài đặt Tiêu đề tiền tố nếu muốn.

Cũng lưu ý rằng,

Không đặt macro trong tệp a.pch! Theo định nghĩa, tệp .pch là tiêu đề được biên dịch trước của một dự án cụ thể. Nó thực sự không nên được sử dụng ngoài ngữ cảnh của dự án và nó thực sự không nên chứa bất kỳ thứ gì ngoài #includes và #imports.

Nếu bạn có một số macro và muốn chia sẻ giữa các tiêu đề, hãy gắn chúng vào tệp tiêu đề của riêng chúng - Common.h hoặc bất cứ thứ gì - và #include nó ở đầu .pch


Vui lòng xem xét thêm một bình luận để chỉ ra lý do từ chối nhiệm vụ cũ kỹ này.
Hemang

7

Các tiêu đề tiền tố được biên dịch và lưu trữ trong bộ nhớ cache, sau đó được tự động đưa vào mọi tệp trong quá trình biên dịch. Điều này có thể tăng tốc độ biên dịch và cho phép bạn bao gồm tệp mà không cần thêm câu lệnh nhập vào mọi tệp sử dụng tệp đó. Chúng không được yêu cầu và thực sự làm chậm quá trình biên dịch bất cứ khi nào bạn thay đổi chúng.

Nói chung .pchcách đặt tên tệp làyourProjectName-Prefix.pch


1

Lịch sử:

#include => #import => .pch

#include so với #import

Tiêu đề được biên dịch trước - prefix.pch

#includevs @importcó một nhược điểm - thời gian xây dựng chậm vì trình biên dịch phải phân tích cú pháp và biên dịch nhiều lần như nhiều .htệp được nhập vào.

Precompiled header file - .pch- thu thập các tiêu đề chung. Khi tệp này được biên dịch trước, tệp này có thể được sử dụng trong tệp nguồn để tăng tốc thời gian xây dựng.

Hãy cùng xem qua Prefix.pchmẫu:

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif

Để thêm .pchtệp, hãy truy cập Build Settings:

nhập mô tả hình ảnh ở đây

Nhà phát triển phải quản lý .pchtệp có chi phí bổ sung để hỗ trợ nó.

Bước tiếp theo là @import[Giới thiệu]

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.