Xcode build setting "Build Products Path" (CONFIGURATION_BUILD_DIR) is a lie?

Rob N picture Rob N · Apr 19, 2015 · Viewed 20.3k times · Source

If I create a new application project, the build settings look something like this:

enter image description here

It claims to be using a build dir build/Debug-iphoneos. I assume this is relative to the project directory? In reality, the project is compiled to the "derived data" directory, under ~/Library/Developer/Xcode/DerivedData/CryptoTest2-abc...

So what is going on here? Is this build setting simply ignored? What is the build setting that controls the output directory?

Answer

Stéphane Copin picture Stéphane Copin · Aug 11, 2015

This build setting is actually relative to the Derived Data setting. You can change this setting if you go to Xcode > Preferences > Locations, and change the Derived Data directory setting to whatever suits your needs (Default, Relative or Custom). Xcode settings illustration

You can also specify this on a per project-basis, if you specify an absolute path for that settings:

  • You can either hardcode a path such as /build/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}, then the project will be built into the folder build in the root folder.
  • Or can you can choose to prepend the existing path with another environment variable. For example, to make the path relative to your project/workspace (As you would expect), you can prepend the original value with ${SRCROOT}/, effectively creating a build folder at the root of your project/workspace.

Settings that can be substitued in ${<setting>} are called Build settings, and are set automatically by Xcode/xcodebuild whenever you start building your project. Apple maintains a list of the available build settings here:
http://help.apple.com/xcode/mac/8.0/#/itcaec37c2a6