What the different between SRCROOT and PROJECT_DIR?
SRCROOT
& PROJECT_DIR
are same macros have same effect.PROJECT_DIR
makes more sense when talking about frameworks.
Exchangeable in practice, while the documentation makes these subtle theoretical distinctions:
SRCROOT
Directory path. Identifies the directory containing the target’s source files: contains the path to the project file that defines the target.
SOURCE_ROOT
is an undocumented alias toSRCROOT
PROJECT_DIR
Identifies the directory containing the project (.xcodeproj
)$(PROJECT_DIR)/build
is used as the create the default value for:- Intermediate Build Files Path
OBJROOT
- Build Products Path
SYMROOT
Typically these paths are not set per target, but are set per-project or per-user.
- Intermediate Build Files Path
PROJECT_FILE_PATH
Identifies the project itself.
Equivalent to$(PROJECT_DIR)/$(PROJECT_NAME).xcodeproj
Conceptually different (#1 is about the project which defines the target while #2 is about the project independently of any target), they are always pointing to the same location since you are, in essence, always building a target.
References
Xcode 8.3 Build Settings reference
Xcode Build System Guide (Retired 2016-09-29)