Как правильно настроить рабочие пространства Xcode 4 для построения зависимостей при необходимости? - PullRequest
36 голосов
/ 25 марта 2011

Мой случай прост: рабочая область с двумя одноуровневыми проектами: одно основное приложение (iOS) и проект, который создает несколько статических целевых библиотек, используемых приложением.

Вот как я настроил сборку:

  • указал «путь поиска заголовка пользователя» в настройках сборки основного приложения на местоположение проекта библиотеки (через дерево исходных текстов)
  • в редакторе главной цели моего приложения -> фазы сборки -> В разделе «Связать двоичные файлы с библиотеками» добавлены продукты библиотеки, которые я хочу использовать.
  • в схеме, помеченные «Найти неявные зависимости»

После очистки (и удаленияпроизводные данные), сборка устраняет эту ошибку при сборке основного проекта:

ld: library not found for -lChipmunk
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1

Конечно, если я посмотрю вновь созданные производные данные, единственные объектные файлы, которые будут найдены:для основного приложения, а не библиотеки.Широко распространенное «find» для файлов * .o не раскрывает ничего значимого, поэтому библиотеки не теряются, они точно не собираются.

Некоторые дополнительные замечания:

  • когда я спрашивал об этом на форумах разработчиков Apple, мне предложили добавить явные депы в главном редакторе Build Phases-> Target Dependencies.Но вы можете добавить здесь только цели к цели в том же проекте или подпроектах;в моем случае я использую проекты приложений и библиотек как братьев и сестер на рабочем месте.
  • если я собираю каждую библиотеку вручную перед основной сборкой, все в порядке.

Обновление:

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

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

Ответы [ 4 ]

41 голосов
/ 06 августа 2012

Редактирование схемы (переключение между целями сборки, снятие / проверка «Параллелизировать сборку» и / или «Поиск неявных зависимостей») не работало для меня. Мне все еще приходилось чистить сборку проекта после любого изменения кода в статической lib. Ища форумы разработчиков, я наконец нашел этот ответ , который творил чудеса.

Убедитесь, что инспектор идентификаторов и типов отображается, и выберите файл libWhwhat.a в проекте вашего приложения (не в библиотеке). Если вы видите Местоположение: относительно проекта [или относительно группы], это ваша проблема.

  1. Нажмите Относительно проекта и измените его на Относительно сборки. Продукты.
  2. Это изменит тип ссылки, но все равно быть сломленным.
  3. Нажмите кнопку поиска и найдите выходной файл.

Добавление статической библиотеки в существующий проект через Фазы сборки -> Связать двоичные файлы с библиотеками автоматически делает их "Относительно группы" (если оба являются братьями и сестрами в одной рабочей области) , Изменение местоположения способом, описанным выше, решает проблему зависимости сборки, и в навигаторе проекта ваш файл .a должен отображаться черными буквами (вместо красных).

8 голосов
/ 04 апреля 2011

Я описал способ настройки нескольких проектов в рабочей области здесь: http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/

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


Редактировать: По возможности я рекомендую использовать https://github.com/CocoaPods/CocoaPods для управления зависимостями проекта на этом этапе.

2 голосов
/ 25 марта 2011

Попробуйте перетащить проект библиотеки в основной проект:

library project reference inside main project

0 голосов
/ 22 января 2013

В моем случае, единственный способ получить эту сборку конфигурации - это вручную добавить путь "../MyLibProject/build/Debug-iphoneos" (проверяя рекурсивность, просто чтобы убедиться) в моих настройках сборки -> Библиотека Пути поиска. Добавление файла .a в один только основной проект не предотвратило ошибку «lib not found» во время ссылки.

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