2013-04-13 3 views
0

У меня есть подпроект (статическая библиотека) внутри моего проекта.включая заголовок проекта в статическую библиотеку

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

Проблема заключается в том, что добавление

#import "config.h" 

на статической библиотеке не удается, потому что файл не может быть найден.

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

В том числе $ (SRCROOT) на пути поиска статической библиотеки даст мне корень для этой библиотеки не для проекта, использующего его, это то, что я хочу.

Как это решить?

Просто обратите внимание на мой вопрос. Я внутри статической библиотеки, которая используется проектом. Config.h находится в проекте. Я хочу импортировать этот config.h в свою статическую библиотеку.

Если есть простой способ сделать это, сообщите мне.

Я загрузил пример проекта в here и here, так что вы можете видеть мою боль.

благодаря

ответ

0

Один из способов, несколько рубить, чтобы добавить Run Script для сборки фазы каждого приложения, как первый элемент, и он скопировать config.h в какой-то известное место - /tmp/Config.h, и ваша включенная библиотека будет искать его там. Поскольку файл копируется на каждую сборку, он всегда будет правильным.

EDIT1: Так не красиво, но вы можете добавить сценарий запуска сборки только под зависимостями в библиотеке. Просто добавьте его и установите флажок, чтобы показывать переменные среды. Вы можете увидеть это один набор:

file_list =/Volumes/Data/Users/dhoerl/Library/Developer/Xcode/DerivedData/MyProject-fdzaatzqtmrnzubseakedvxmsgul/Build/полупродукты/MyStaticLibrary.build/Debug-iphoneos/MyStaticLibrary.build/Объекты/LinkFileList

что вы можете увидеть, что некоторые из них имеют в качестве префикса текущую папку проекта:

/Volumes/Data/Users/dhoerl/Library/Developer/Xcode/DerivedData/MyProject-

Вы можете написать какой-нибудь скрипт там, чтобы получить префикс, а затем добавить локальный путь к файлу Config.h, и теперь у вас есть полный путь к заголовку Config.h, который затем можно скопировать в известное место в библиотеке. Я собираюсь опубликовать на форуме xcode, поскольку может быть лучшее решение - там будет Xcode 3. Я обновлю это, если я получу что-нибудь существенное.

EDIT2: Попробуйте это: 1) Нажмите на библиотеку, нажмите на Строительства фазам, добавьте Run Script Построить фазу, нажав в правом нижнем углу «+» кнопка

2) Перетащите его так, его второй пункт в список (ниже целевые зависимостей)

3) Изменения консоли для "/ bin/КШ"

4) Вставьте это, после его редактирования, чтобы иметь соответствующие файлы/путь:

# Get the Project Name (assumes upper/lower/numbers only in name) 
PROJ=$(echo $BUILD_DIR | sed -En -e 's/(\/.*\/)([A-Za-z0-9]+)-([a-z]+\/Build\/Products)/\2/p') 
# Use this variable to construct a full path 
FULL_PATH="/Volumes/Data/Users/dhoerl/Downloads/nightmare/"$PROJ"/"$PROJ"/HelloWorldLayer.h" 
echo FULL_PATH equals $FULL_PATH 
# Make Sure MyStaticLibrary is correct 
echo PROJ_DIR equals "$PROJECT_DIR/MyStaticLibrary" 
cp -f "$FULL_PATH" "$PROJECT_DIR/MyStaticLibrary" 

5) Предполагается, что вы помещаете библиотеку в любом месте, но каждый проект приложения должен иметь одну и ту же родительскую папку (не большая часть ограничений - то, что я делал в прошлом).

PS: Когда я это делаю, я обычно не включаю фактический файл приложения, но создаю заголовок для класса, который не создается в библиотеке. Позволяет называть это Foo. Итак, в вашей библиотеке у вас есть Foo.h, и в нем есть много методов, которые возвращают информацию - количество виджетов, расположение какой-либо специальной папки, plists, массивов, словарей и т. Д. Идея заключается в том библиотека знает, как получить то, что ему нужно через этот интерфейс (класс одноплодной или просто класс с методами класса YMMV

PSS:.. Кто-нибудь читает это, он платит, чтобы создать демонстрационные проекты

+0

не работает для меня Я загрузил образец проекта в ** [здесь] (http://dfiles.eu/files/vj7egy9ig) ** и ** [здесь] (http://www.sendspace.com/file/dfvs09) * *, поэтому вы можете видеть мою боль. – SpaceDog

+0

Глядя на это ... –

+0

отлично! Благодаря!! – SpaceDog

0
.

Я бы выбрал другой путь: сделайте этот файл config.h частью статической библиотеки, используя символы компилятора, чтобы переключать функции. Затем в ваших проектах определяйте эти символы в зависимости от того, какие функции вам нужны.

+0

Я не могу этого сделать, потому что config.h специфичен для каждого проекта. Если я изменяю config.h для каждого проекта и находится внутри статической библиотеки, все проекты будут читать эту модифицированную версию. – SpaceDog

+0

не работает для меня. Я загрузил образец проекта на ** [здесь] (http://dfiles.eu/files/vj7egy9ig) ** и ** [здесь] (http://www.sendspace.com/file/dfvs09) ** , поэтому вы можете видеть мою боль. – SpaceDog

Смежные вопросы