【发布时间】:2013-02-26 21:32:10
【问题描述】:
$(inherited) 搜索路径设置是什么?
我已经修改了有关适用于 iPad 的 OpenSSL 的标头和库搜索路径设置,这个问题以及给定路径的递归选项是罪魁祸首。
当我重新排列搜索路径以首先查看目录然后查看 $(inherited) 时,iPad 构建工作正常。
【问题讨论】:
标签: xcode
$(inherited) 搜索路径设置是什么?
我已经修改了有关适用于 iPad 的 OpenSSL 的标头和库搜索路径设置,这个问题以及给定路径的递归选项是罪魁祸首。
当我重新排列搜索路径以首先查看目录然后查看 $(inherited) 时,iPad 构建工作正常。
【问题讨论】:
标签: xcode
如果您转到目标构建设置,然后切换到关卡视图
从右到左可以看到inherited的流向
Resolved <- Target <- xcconfig <- Project <- iOS Default
所以inherited in Target 表示 Target 从 xcconfig 和 Project 继承设置
【讨论】:
find . -name '*xcconfig' -print 或 find . -name '*xcconfig' -print -exec grep OTHER_LDFLAGS {} \;
我也在寻找文档。但我获得了经验,$(inherited) 可用于将构建设置从项目级别继承到目标级别。在项目级别定义库或标头搜索路径时,您可以在目标构建设置中使用$(inherited),以便在项目目标的搜索路径中使用这些搜索路径。
【讨论】:
覆盖示例通过在 xcconfig 文件中重新分配该变量的值,在项目或目标级别上设置设置变量。
// Variable set in the project file, previous level
OTHER_LDFLAGS = -ObjC
// lib.xcconfig
OTHER_LDFLAGS = -framework Security
^ 使用它进行编译时,OTHER_LDFLAGS -ObjC 的先前值将被新值 -framework Security 覆盖。
继承示例通过附加到 xcconfig 文件中该变量的先前值,在项目或目标级别上设置设置变量。将$(inherited) 视为一个特殊变量,可用于获取变量的现有值,因此对同一变量的赋值不会造成破坏。
// Variable set in the project file, previous level
OTHER_LDFLAGS = -ObjC
// lib.xcconfig
OTHER_LDFLAGS = $(inherited) -framework Security
^ 编译时,OTHER_LDFLAGS 的值为-ObjC -framework Security。
【讨论】:
附录:
$(inherited) Build Settings->Library Search Path 在您通过单击 Target Membership 右侧窗格将库添加到目标时自动填充。否则不会发生这种情况。
【讨论】:
Xcode $(继承)
[Xcode ${<variable_name>} syntax]
Xcode 变量可以定义在不同的级别(Project、.xcconfig、Target、Default)。当您使用Build Settings -> Levels 标签时,您可以检查层次结构和已解决结果
$(inherited) 使用来自超级级别的变量值。
请注意几点:
当您应该连接像$(inherited)-myPrefix 这样的结果值时,它很有用。用作独立表达式并不是那么有用,因为即使您从后继对象中删除$(inherited) 或任何其他值(目标是项目的后继对象),Xcode 也会自动根据前身更改此值
您可以在项目级别和目标级别设置.xcconfig,这就是结果层次结构不恒定的原因
Resolved <- Target <- Target .xcconfig <- Project <- Project .xcconfig <- Default
例如目标 = $(inherited)
【讨论】: