Где находится настройка Xcode для собственных файлов заголовков проекта?

Я хочу точно понять, как Xcode ищет файлы заголовков, которые являются частью проекта (не заголовки системы или библиотеки), но я не могу найти ссылку на каталог проекта в настройках сборки. Параметр Пути поиска заголовков имеет только системный путь. Где и как контролируется путь поиска проекта?

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

Например, если у меня есть два заголовка с одинаковым именем, один в группе (с соответствующей папкой) и один на верхнем уровне, например:

Thing.h (1)
Top.cc
Group1/Thing.h (2)
Group1/Inner.cc

Чтобы Top.cc получил (1) и (2), он должен сказать #include "Thing.h" и #include "Group1/Thing.h"

Чтобы Inner.cc сделал то же самое, он должен сказать #include "../Thing.h" и #include "Thing.h".

Красиво, а где настройки? Что такое флаг компилятора? Я этого не вижу.

(Я понимаю, что этот тип вложенности менее полезен в Objective-C, потому что вы не можете поместить класс в пространство имен, но я хотел бы использовать его для своего кода на C++.)


person Rob N    schedule 13.01.2015    source источник
comment
Эмпирическое правило заключается в том, что если вы добавите заголовок в любом месте иерархии исходных файлов проекта, Xcode найдет его во время компиляции - я думаю, что он просто добавляет -I для каждого каталога в проекте, который содержит один или несколько файлов заголовков.   -  person Paul R    schedule 13.01.2015
comment
Я посмотрел командную строку в журнале сборки. Я не вижу ничего подобного. Может быть, этот вопрос больше о clang.   -  person Rob N    schedule 13.01.2015
comment
Это странно - если я посмотрю на командную строку CompileC для одного из моих проектов Xcode, я увижу множество переключателей -I для соответствующих каталогов в проекте.   -  person Paul R    schedule 13.01.2015
comment
У меня есть несколько флагов -I, но не для проецирования директорий. Некоторые из них относятся к двоичным файлам .hmap. Думаю, пока я просто доверюсь магии.   -  person Rob N    schedule 13.01.2015
comment
О, это объясняет — вы используете предварительно скомпилированные заголовки.   -  person Paul R    schedule 13.01.2015


Ответы (1)


См. Настройки сборки Header-Map в справочной документации по настройкам сборки.

Цитировать:

Карты заголовков (также известные как «карты заголовков») — это файлы, которые Xcode использует для компиляции местоположений заголовков, используемых в цели. Эти файлы используют суффикс .hmap. Xcode передает карты заголовков, которые он собирает, компиляторам на основе C через аргумент -I.

Я полагаю, настройка HEADERMAP_INCLUDES_PROJECT_HEADERS — это то, что вам нужно.

person Sebastian    schedule 22.07.2015