为了实现完全分离,必须更改以下构建设置(不仅仅是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 crashing on startup “parentPath must be nil but it is not。
我写了一篇关于这个解决方案的帖子,有点背景:xcodebuild: how to really change its build path。
附:当然,这些信息可能会发生变化,但从 Xcode Version 7.3.1 (7D1014) 开始,它对我来说非常有效。