The man page for xcodebuild
reads:
Run xcodebuild from the directory containing your project (i.e. the directory containing the projectname.xcodeproj package).
I would like to keep my source directory (which is a Subversion external) clean and unmodified, and build my object files and executables to a location completely outside of the source directory.
Is there any way to build into a separate build directory from a terminal using xcodebuild
like you can do with make
tools or even msbuild
on Windows?
Xcode 10
For a Workspace if you're using CocoaPods:
That will put your .app in
./build/Release-iphonesimulator
In my project, setting
SYMROOT
turned out to be sufficient to build the project in a different location, leaving other locations untouched.From Apple's Xcode Build Setting Reference (which I came across via another answer here, thanks!):
This setting is also mentioned a few times in the
xcodebuild
man page:You can set build settings from the command line. The
CONFIGURATION_BUILD_DIR
will set the build directory. For example:A reference is found on Apple's site:
You should set the
SYMROOT
build setting to your desired location. All of the other relevant build settings are derived from it.To achieve complete separation the following build settings have to be changed (more than just
CONFIGURATION_BUILD_DIR
like accepted answer suggests), otherwise Xcode still builds some of its artifacts under its default build folder.On my machine Xcode normally builds everything to
./Build
and./DerivedData
where current directory is one of my project.I wanted xcodebuild to build everything under
Build-command-line
folder so I usedxcodebuild -scheme MyScheme -showBuildSettings | grep Build\/
to find all build settings that correspond to all build paths and by trial-end-error I found "the generative" build settings that are enough to redirect all build artefacts produced by xcodebuild to custom folder.I ended up using the following command:
Where
command-line-build.xcconfig
is:Note: Make sure you use absolute paths in your xcconfig, otherwise you may have error: Xcode crashing on startup “parentPath must be nil but it is not.
I have written a post about this solution with a bit of background: xcodebuild: how to really change its build path.
P.S. Of course this information is subject to change but as of
Xcode Version 7.3.1 (7D1014)
it works perfectly for me.