SRCROOT 和 PROJECT_DIR 有什么区别?

What the different between SRCROOT and PROJECT_DIR?

在Xcode中,我们要在Build Settings中配置很多路径,然后我们会处理$(SRCROOT)$(PROJECT_DIR) ,但是它们之间有什么区别,你能给我举个例子吗,谢谢。

SRCROOT & PROJECT_DIR 是相同的宏,具有相同的效果。PROJECT_DIR 在谈论框架时更有意义。

在实践中可交换,而文档在理论上做出了这些微妙的区别:

  1. SRCROOT

    Directory path. Identifies the directory containing the target’s source files: contains the path to the project file that defines the target.

    SOURCE_ROOTSRCROOT

  2. 的未记录的别名
  3. PROJECT_DIR
    标识包含 project (.xcodeproj)
    的目录 $(PROJECT_DIR)/build 用作创建默认值:

    • 中间构建文件路径OBJROOT
    • 构建产品路径SYMROOT

    Typically these paths are not set per target, but are set per-project or per-user.

  4. PROJECT_FILE_PATH
    标识项目本身。
    相当于$(PROJECT_DIR)/$(PROJECT_NAME).xcodeproj

概念上不同(#1 是关于定义 目标 的项目,而 #2 是关于 独立地 任何目标的项目) , 它们总是指向相同的位置,因为您本质上总是在构建目标。

参考资料

Xcode 8.3 Build Settings reference
Xcode Build System Guide(2016 年 9 月 29 日退休)

$ (SRCROOT)代表项目根目录。像这是一个相对路径,应该使用 SRCROOT

$ (PROJECT_DIR)代表整个项目。应该用PROJECT_DIR到第一个test01,代表项目的最外层文件夹

在项目中添加文件时,如.a等,先showinfinder,复制到项目中,然后拖到xcode项目中