SRCROOT和PROJECT_DIR有什么不同?

在Xcode中,我们必须在“ 构build设置”中configuration许多path,而不是处理$(SRCROOT)$(PROJECT_DIR) ,但是它们之间有什么区别,能否给我一个例子,thx很多。

在实践中可以交换,而文档使这些微妙的理论区别:

  1. SRCROOT

    目录path。 标识包含目标源文件的目录:包含定义目标项目文件的path。

    SOURCE_ROOTSRCROOT的未SOURCE_ROOT的别名

  2. PROJECT_DIR
    标识包含项目的目录( .xcodeproj
    $(PROJECT_DIR)/build被用作创build默认值:

    • 中级构build文件pathOBJROOT
    • 构build产品pathSYMROOT

    通常,这些path不是针对每个目标设置的,而是针对每个项目或每个用户设置的。

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

从概念上讲,不同的是(#1是关于定义目标的项目,而#2是关于独立于任何目标的项目),它们总是指向相同的位置,因为实质上,它总是build立一个目标。

参考

Xcode 8.3构build设置参考
Xcode构build系统指南 (2016-09-29已退休)

SRCROOTPROJECT_DIR是相同的macros具有相同的效果。 PROJECT_DIR在讨论框架时更有意义。