Отдельный каталог сборки с использованием xcodebuild - PullRequest
14 голосов
/ 11 февраля 2011

Страница man для xcodebuild гласит:

Запустите xcodebuild из каталога, содержащего ваш проект (то есть каталога, содержащего пакет projectname.xcodeproj).

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

Есть ли способ встроить вотделить каталог сборки от терминала, используя xcodebuild, как вы можете сделать с помощью инструментов make или даже msbuild в Windows?

Ответы [ 5 ]

29 голосов
/ 11 февраля 2011

Вы можете установить параметры сборки из командной строки.CONFIGURATION_BUILD_DIR установит каталог сборки.Например:

xcodebuild -project YourProject.xcodeproj -configuration Debug -target All ARCHS=x86_64 ONLY_ACTIVE_ARCH=YES CONFIGURATION_BUILD_DIR=../some/other/dir

Ссылка найдена на сайте Apple:

7 голосов
/ 27 февраля 2016

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

На моей машине XCode обычно все компилирует в ./Build и ./DerivedData, где текущий каталог является одним из моих проектов.

Я хотел, чтобы xcodebuild собирал все в папке Build-command-line, поэтому я использовал xcodebuild -scheme MyScheme -showBuildSettings | grep Build\/, чтобы найти все параметры сборки, которые соответствуют всем путям сборки, и методом триал-ошибки я нашел "генеративные" настройки сборки, которых достаточно для перенаправить все артефакты сборки, созданные xcodebuild , в пользовательскую папку.

В итоге я использовал следующую команду:

BUILD_DIR=./Build-command-line
DERIVED_DATA_DIR=$(BUILD_DIR)/DerivedData

xcodebuild -project MyProject.xcodeproj \
         -IDEBuildOperationMaxNumberOfConcurrentCompileTasks=`sysctl -n hw.ncpu` \
         -scheme MyScheme \
         -sdk iphonesimulator \
         -destination 'platform=iOS Simulator,name=iPhone 6S Plus,OS=latest' \
         -xcconfig command-line-build.xcconfig \
         -derivedDataPath $(DERIVED_DATA_DIR) \
         test

Где command-line-build.xcconfig:

HERE_BUILD=$(SRCROOT)/Build-command-line
HERE_INTERMEDIATES=$(HERE_BUILD)/Intermediates

// Paths
// the following paths are enough to redirect everything to $HERE_BUILD
MODULE_CACHE_DIR    = $(HERE_BUILD)/DerivedData/ModuleCache
OBJROOT             = $(HERE_INTERMEDIATES)
SHARED_PRECOMPS_DIR = $(HERE_INTERMEDIATES)/PrecompiledHeaders
SYMROOT

Примечание: Убедитесь, что вы используете абсолютные пути в xcconfig, в противном случае у вас может возникнуть ошибка: Xcode вылетает при запуске «parentPath должен быть нулевым, но это не .

Я написал пост об этом решении с небольшим фоном: xcodebuild: как реально изменить путь сборки .

P.S. Конечно, эта информация может быть изменена, но с Xcode Version 7.3.1 (7D1014) она отлично работает для меня.

3 голосов
/ 08 марта 2016

В моем проекте настройка SYMROOT оказалась достаточной для создания проекта в другом месте, оставив другие места нетронутыми.

От Apple Справочник по настройке сборки XCode (с которым я столкнулся через другой ответ, спасибо!):

SYMROOT (путь к продуктам сборки)

Описание: путь к каталогу. Определяет корень иерархии каталогов, которая содержит файлы продукта и промежуточные файлы сборки. Файлы продукта и сборки находятся в подкаталогах этого каталога.

...

Влияет: BUILT_PRODUCTS_DIR, CONFIGURATION_BUILD_DIR (...)

Этот параметр также несколько раз упоминается на справочной странице xcodebuild:

Доступны следующие действия:

build: построить цель в корне сборки (SYMROOT) ...

clean: удаление продуктов сборки и промежуточных файлов из корня сборки (SYMROOT) ....

1 голос
/ 19 ноября 2018

Xcode 10

Для рабочей области, если вы используете CocoaPods:

xcodebuild -workspace youProject.xcworkspace -scheme yourScheme -sdk iphonesimulator -configuration Release SYMROOT=$(PWD)/build

Это поместит ваш .app в ./build/Release-iphonesimulator

1 голос
/ 26 марта 2017

Вы должны установить настройку SYMROOT в нужное место.Все остальные соответствующие параметры сборки получены из него.

...