xcodebuild
的手册页读取:
从目录运行xcodebuild 包含你的项目(即 包含的目录 projectname.xcodeproj包)。
我想保持我的源目录(这是一个Subversion外部)干净且未修改,并将我的目标文件和可执行文件构建到完全位于源目录之外的位置。
有没有办法使用xcodebuild
从终端构建单独的构建目录,就像在Windows上使用make
工具甚至是msbuild
一样?
答案 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)
对于工作区,如果您使用的是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")