使用xcodebuild分离构建目录

时间:2011-02-11 14:08:37

标签: macos xcodebuild

xcodebuild的手册页读取:

  

从目录运行xcodebuild   包含你的项目(即   包含的目录   projectname.xcodeproj包)。

我想保持我的源目录(这是一个Subversion外部)干净且未修改,并将我的目标文件和可执行文件构建到完全位于源目录之外的位置。

有没有办法使用xcodebuild从终端构建单独的构建目录,就像在Windows上使用make工具甚至是msbuild一样?

6 个答案:

答案 0 :(得分:29)

您可以从命令行设置构建设置。 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的网站上有参考文献:

答案 1 :(得分:6)

要实现完全分离,必须更改以下构建设置(不仅仅是<div class="container"> <div class="row"> <h2 class="section-heading">How it Works</h2> <div class="col-md-3 col-sm-6"> <img class="img-responsive" src="http://pngimg.com/upload/apple_PNG40.png"> <p class="text-center">You need an apple</p> </div> <div class="col-md-3 col-sm-6"> <img class="img-responsive" src="http://pngimg.com/upload/apple_PNG40.png"> <p class="text-center">You need an orange</p> </div> <div class="col-md-3 col-sm-6"> <img class="img-responsive" src="http://pngimg.com/upload/apple_PNG40.png"> <p class="text-center">You need a pineapple</p> </div> <div class="col-md-3 col-sm-6"> <img class="img-responsive" src="http://pngimg.com/upload/apple_PNG40.png"> <p class="text-center">You need a melon</p> </div> </div> </div> ,如接受的答案建议),否则Xcode仍然会在其默认构建文件夹下构建一些工件。

在我的机器上,Xcode通常会将所有内容构建到CONFIGURATION_BUILD_DIR./Build,其中当前目录是我的项目之一。

我希望xcodebuild在./DerivedData文件夹下构建所有内容,因此我使用Build-command-line查找与所有构建路径对应的所有构建设置,并通过我发现的试验结束错误&#34;生成& #34;构建足以将 xcodebuild 生成的所有构建工件重定向到自定义文件夹的设置。

我最终使用以下命令:

xcodebuild -scheme MyScheme -showBuildSettings | grep Build\/

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

注意:请确保在xcconfig中使用绝对路径,否则可能会出现错误:Xcode crashing on startup “parentPath must be nil but it is not

我写了一篇关于此解决方案的帖子,其中有一些背景知识:xcodebuild: how to really change its build path

P.S。当然,这些信息可能会有所变化,但截至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 ,它对我来说非常有用。

答案 2 :(得分:3)

在我的项目中,设置SYMROOT足以在不同的位置构建项目,而不会触及其他位置。

来自Apple的Xcode Build Setting Reference(我在这里通过另一个答案遇到了,谢谢!):

  

SYMROOT (构建产品路径)

     

描述:目录路径。标识包含产品文件和中间构建文件的目录层次结构的根。产品和构建文件放在此目录的子目录中。

     

...

     

影响:BUILT_PRODUCTS_DIR,CONFIGURATION_BUILD_DIR(...)

xcodebuild手册页中也提到过几次这个设置:

  

可用的行动是:

     

build:在构建根目录中构建目标(SYMROOT)......

     

clean:从构建根目录中删除构建产品和中间文件(SYMROOT)....

答案 3 :(得分:1)

您应该将SYMROOT版本设置设置为所需的位置。所有其他相关的构建设置都是从​​它派生的。

答案 4 :(得分:1)

Xcode 10

对于工作区,如果您使用的是CocoaPods:

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

这会将您的.app放入./build/Release-iphonesimulator

答案 5 :(得分:0)

您还可以临时更改工作目录并从那里运行命令。即

 (cd dir1/dir2/MyApp && xcodebuild build -workspace "MyApp.xcworkspace" -scheme "MyApp")