Arhn - архитектура программирования

Проблема с Xcode PCH — элементы в PCH не включены в исходные файлы

Я только что создал проект библиотеки "C++ Standard Dynamic" с использованием Xcode и скомпилировал с использованием LLVM 2.0. Я заметил, что файл PCH содержит строку #include <iostream>, но файл Test.cp также содержит этот оператор #include <iostream>.

Странно то, что при удалении оператора в Test.cp сборка завершается с ошибкой Semantic Issue – Use of undeclared identifier 'std', несмотря на то, что этот оператор также включен в PCH.

Почему не работает ПЧ? Есть ли настройка, которую мне не хватает? Я никогда ничего не делал с ними раньше (поскольку они всегда просто работают), поэтому я не уверен, что заставляет его не работать, даже с совершенно новым проектом.


  • XCode 4 все еще находится под соглашением о неразглашении, не так ли? Для этого вам следует посетить форум разработчиков Apple. 17.10.2010

Ответы:


1

Предварительно скомпилированные заголовки используются для ускорения компиляции. Они не имеют никакого другого эффекта, в частности, вам все равно придется включать заголовки там, где они вам нужны.

Редактировать. В Xcode файл pch на самом деле является заголовком префикса, который оказывается предварительно скомпилированным (с конфигурацией проекта по умолчанию). Проверьте настройки сборки GCC_PRECOMPILE_PREFIX_HEADER и GCC_PREFIX_HEADER.

17.10.2010
  • Хм... такого я не видел. В частности, файл PCH, сгенерированный для совершенно нового проекта Cocoa, выглядит следующим образом: #ifdef __OBJC__ #import <Cocoa/Cocoa.h> #endif. Если я удалю отдельный #import <Cocoa/Cocoa.h> из каждого файла заголовка, он все равно будет работать, несмотря на то, что файл .pch является единственным местом, куда включен Cocoa. Возможно ли, что такое поведение (PCH функционирует как своего рода глобальный заголовок) уникально для проектов Cocoa? 17.10.2010
  • из статьи в Википедии: связанная с этим функция — префиксный заголовок, представляющий собой файл, который автоматически включается компилятором, не требуя использования каких-либо директив компилятора. Префиксные заголовки обычно предварительно скомпилированы, но не все предварительно скомпилированные заголовки являются префиксными заголовками. Не уверен, почему XCode рассматривает предварительно скомпилированный заголовок как заголовок префикса. 17.10.2010
  • Ха... странно. В какой-то момент я использовал файл .pch в качестве заголовка префикса, и это сработало, но теперь я не могу понять, как я это сделал... это было давно. Если только это не было по умолчанию. В любом случае, спасибо за вашу помощь. В итоге я просто поместил операторы в начало каждого файла; это не так уж важно. 21.10.2010
  • Вы также можете установить свойство Prefix Header в настройках вашего проекта. 22.10.2010
  • Это неверно для XCode. Вы можете переместить импорты в pch и удалить их из исходных файлов. Так что у них есть другие эффекты, и вам не нужно включать их в исходные файлы, если они есть в файле pch. 24.04.2013
  • @Jelle, посмотри мое редактирование. Файл pch в Xcode на самом деле является префиксным заголовком. 26.04.2013

  • 2

    Удалите производные данные (Window-Organizer, вкладка «Проекты», выберите свой проект), чтобы XCode перестроил индекс для PCH. Кроме того, если вы используете модульные тесты, для цели UnitTests существует отдельный PCH. Убедитесь, что это также включает в себя необходимый импорт.

    24.04.2013
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..