Разделить каталог сборки с помощью xcodebuild
Страница руководства для xcodebuild
читает:
Запустите xcodebuild из каталога содержащий ваш проект (т.е. каталог, содержащий projectname.xcodeproj package).
Я хотел бы сохранить исходный каталог (который является внешним объектом Subversion) чистым и немодифицированным, а также создать мои объектные файлы и исполняемые файлы в месте, полностью вне исходного каталога.
Есть ли способ создать отдельный каталог сборки из терминала с помощью xcodebuild
, как вы можете сделать с инструментами make
или даже msbuild
в Windows?
Ответы
Ответ 1
Вы можете установить параметры сборки из командной строки. 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:
Ответ 2
Чтобы достичь полного разделения, необходимо изменить следующие параметры сборки (более чем на 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
В моем проекте установка SYMROOT
оказалась достаточной для создания проекта в другом месте, оставив другие места нетронутыми.
Из Apple Ссылка на установку кода Xcode (которую я нашел через другой ответ здесь, спасибо!):
SYMROOT (путь создания продуктов)
Описание: путь к каталогу. Идентифицирует корень иерархии каталогов, содержащий файлы продуктов и промежуточные файлы сборки. Файлы продукта и сборки размещаются в подкаталогах этого каталога.
...
Влияет: BUILT_PRODUCTS_DIR, CONFIGURATION_BUILD_DIR (...)
Эта настройка также упоминается несколько раз на странице xcodebuild
man:
Доступные действия:
build: создать цель в корне сборки (SYMROOT)...
clean: удалить сборку продуктов и промежуточных файлов из корня сборки (SYMROOT)....
Ответ 4
Вы должны установить параметр SYMROOT
build в нужное место. Все другие соответствующие настройки сборки получены из него.