Файл заголовка XCode 4 C ++ с относительным путем к другому заголовку - PullRequest
1 голос
/ 10 июня 2011

Я использую библиотеку со структурой включения, в которой все файлы .h находятся в одном каталоге. Эти файлы .h содержат одну строку, директиву #include, которая указывает на «настоящий» заголовочный файл в определенных местах исходных папок. Путь #include в этих файлах является относительным.

Итак, вот пример. Структура каталогов:

/project
     /sources 
         <my .cpp files>
         <my .cpp files>
         ...
     /include
         /component
             foo1.h
             foo2.h
     /platformA/something/foo1.h
     /platformB/somethingelse/foo2.h

/ include / component / foo1.h содержит одну строку кода: #include "../platformA/something/foo1.h"

/ include / component / foo2.h содержит одну строку кода #include "../platformB/somethingelse/foo2.h"

В моих источниках у меня просто есть: #include "component/foo1.h"

Путь поиска в заголовке для моего проекта указывает на /include

Теперь XCode 4 может найти component/foo1.h в /include, но не может проследить относительный путь включения в этих заголовках и найти 'real' foo1.h в каталоге `/ platformA / кое-что ', и т. д.

Я подозреваю, что это потому, что пути включения в файле foo1.h верхнего уровня относятся к его местоположению, но XCode может относиться к нему как к некоторому другому местоположению (корень проекта или что-то еще)? FWIW, Visual Studio не имеет проблем с идентичной конфигурацией.

Любые идеи о том, что я могу сделать, чтобы исправить это?

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Из вашей структуры каталогов кажется, что каталоги platformA и platformB размещены вне папки include. Для этого есть два возможных решения:

Раствор А

Переместите эти в папку include.

Раствор B

Добавить project/platformA и project/platformB к directories where include files should be looked for в проекте Настройки.

0 голосов
/ 10 июня 2011

Не используйте относительные пути.Серьезно, это поведение, определяемое реализацией, как они работают, поэтому разные компиляторы / среды / платформы будут вести себя по-разному, и в вашем случае Xcode почти наверняка вызывает GCC или clang в каком-то каталоге "build", который может или не может бытьбрат или сестра в вашем каталоге исходников.

Головная боль не стоит.

Положите platformA и platformB в include или добавьте другой каталог (скажем, platform-include), вставьтеих там, и добавьте этот каталог в ваш путь включения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...