Заголовок платформы не может найти свои собственные файлы заголовков в XCode? - PullRequest
1 голос
/ 26 июня 2010

В Xcode предположим, что есть фреймворк с именем Foo. Внутри папки Foo.framework/Headers находятся файлы File1.h и File2.h. Заголовочный файл File1.h включает File2.h с помощью следующей директивы:

#include <File2.h>

Фреймворк Foo представляет собой перепаковку библиотеки C ++, не предназначенной специально для Mac.

Теперь предположим, что у меня есть проект, который ссылается на фреймворк Foo. Он содержит файл MyFile.mm, который включает File1.h с помощью следующей директивы:

#import <Foo/File1.h>

Теперь, когда я пытался скомпилировать MyFile.mm, он всегда терпел неудачу, потому что не мог найти File2.h. Как я могу получить это для компиляции и запуска без изменения заголовочных файлов Foo framework?

Для любопытных, речь идет о пакетной версии Taglib , взятой из исходного дерева Max . Файл, который я пытался включить, был <taglib/mp4.tag>, и компиляция включающего его файла .mm всегда приводит к сбою, так как mp4tag.h включает <tag.h> без префикса <taglib/...> в директиве include. Ошибка не только в этих заголовочных файлах, но есть и похожие проблемы в большом количестве заголовочных файлов, поэтому изменение всех этих операторов включения не является тривиальным. Все необходимые «отсутствующие» заголовочные файлы фактически присутствуют в подкаталоге Header платформы.

Я пытаюсь использовать Taglib в своем приложении, и, хотя я смог скомпилировать Taglib в качестве фреймворка с заголовочными файлами и добавить его в свое приложение, я не могу заставить приложение скомпилироваться из-за вышеуказанных проблем. .

У кого-нибудь есть указатели?

Спасибо.

Ответы [ 2 ]

1 голос
/ 26 июня 2010

Я думаю, что File1.h должно сказать:

#include "File2.h"

Попробуйте проверить опцию «Всегда искать пути пользователя» в Xcode.

0 голосов
/ 10 октября 2013

Вот шаги, чтобы исправить это:

  1. Измените код на File1.h, чтобы использовать '#include'.
  2. На этапе разработки проекта / целевого объекта по умолчанию / фазы сборки установите фазу «копировать файлы» и добавьте File1.h и File2.h.
  3. Убедитесь, что фаза «копировать файлы» находится перед фазой «компиляции».

Это должно решить проблему, так как фреймворк будет ссылаться на файлы точно так же, как код, использующий фреймворк.

...