Що таке файл Prefix.pch у Xcode?


100

Так багато розробників додають до макросів різні зручності Prefix.pch. Але моє запитання - що це за Prefix.pchфайл.

  • Якщо я видаляю цей Prefix.pchфайл із мого Xcode, то чи буде працювати моя програма? Або покаже якусь помилку? Або він вийде з ладу під час збирання?

  • Як я можу запустити свою програму без Prefix.pchфайлу


Відповіді:


117

Попередньо складений заголовок.

Що це?

A Prefix.pch- заздалегідь складений заголовок. Для швидкого збирання даних було винайдено попередньо складені заголовки . Замість того, щоб розбирати одні й ті ж файли заголовків знову і знову, ці файли розбираються один раз, достроково.

Xcode

У Xcode ви додаєте імпорт файлів заголовків, які ви хочете, у "префікс-заголовок", і вмикаєте Precompile Prefix Headerїх, щоб вони були попередньо скомпільовані. Але ідея заголовка префікса відрізняється від попередньої компіляції.

На початку кожного вихідного файлу неявно додається заголовок префікса. Це як додається кожен вихідний файл

#import "Prefix.pch"

вгорі файлу, перш ніж все інше.

Видалення його.

Ви можете видалити попередньо складений заголовок. На це питання вже відповіли в темі, яку я посилаю нижче. Він містить всю необхідну інформацію, а також корисні коментарі.

Чи добре видалити файл Prefix.pch з проекту Xcode?


24

Що таке файл Prefix.pch?

.Pch - попередньо складений заголовок.

У мовах програмування C і C ++ файл із заголовком - це файл, текст якого може автоматично включатися в інший вихідний файл за допомогою препроцесора C, як правило, визначений використанням директив компілятора у вихідному файлі.

Заголовки префіксу збираються і зберігаються в кеші, а потім автоматично включаються в кожен файл під час компіляції. Це може прискорити компіляцію та дозволяє включити файл, не додаючи заяву про імпорт до кожного файлу, що використовує його. Вони не потрібні, а фактично повільні компіляції, коли ви їх змінюєте.

Так, ви можете компілювати та запускати проект без .pch-файлу

У Xcode перейдіть до налаштувань збірки вашої цілі (Command-Option-E, вкладка збірки) і зніміть прапорець заголовка префіксації прекомпіляції (GCC_PRECOMPILE_PREFIX_HEADER). Ви також можете видалити значення налаштування заголовка префікса, якщо бажаєте.

Також зауважте,

Не ставте макроси у файл .pch! Файл .pch - це, за визначенням, певний заздалегідь складений заголовок проекту. Він дійсно не повинен використовуватися поза контекстом проекту, і він дійсно не повинен містити нічого, крім #includes та #imports.

Якщо у вас є макроси та такі, якими ви хочете ділитися між заголовками, вставте їх у власний файл заголовка - Common.h чи будь-який інший - та #include, що на початку .pch


Просимо додати коментар, щоб вказати причину відмови від цього старого квесту.
Хеман

7

Заголовки префіксу збираються і зберігаються в кеші, а потім автоматично включаються в кожен файл під час компіляції. Це може прискорити компіляцію та дозволяє включити файл, не додаючи заяву про імпорт до кожного файлу, що використовує його. Вони не потрібні, а фактично повільні компіляції, коли ви їх змінюєте.

Зазвичай .pchформування імен файлів єyourProjectName-Prefix.pch


1

Історія:

#include => #import => .pch

#include vs #import

Попередньо складені заголовки - prefix.pch

#includevs @importмає недолік - повільний час збирання, оскільки компілятор повинен проаналізувати та зібрати стільки разів, скільки .hбуло імпортовано файлів.

Precompiled header file - .pch- збирає загальні заголовки. Якщо цей файл є попередньо компільованим, його можна використовувати у вихідних файлах, що прискорює час збирання.

Давайте розглянемо Prefix.pchзразок:

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

Щоб додати .pchфайл, перейдіть до Build Settings:

введіть тут опис зображення

Розробник повинен керувати .pchфайлом, який вимагає додаткових витрат на його підтримку.

Наступний крок - @import[Про]

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