自 2025 年 3 月 27 日起,我们建议您使用 android-latest-release
而非 aosp-main
构建 AOSP 并为其做出贡献。如需了解详情,请参阅 AOSP 的变更。
递归扩展
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
请勿在产品/开发板配置 Makefile 中使用递归扩展。递归扩展是指在 Makefile 中使用原始 =
(而不是 :=
)来为变量赋值。这会导致已设为其他变量的值的变量在自身受评估之前,无法评估那些其他变量。Starlark 不支持此功能。
能否移除它很大程度上取决于使用它的具体场景。大多数时候,它涉及将变量赋值移到其使用位置的前面。例如,将:
MY_VAR_2 = foo
# Some stuff in between...
MY_VAR = $(MY_VAR_2)
MY_VAR_2 = bar
# $(MY_VAR) is bar here.
替换成:
MY_VAR_2 := foo
# Some stuff in between...
MY_VAR_2 := bar
MY_VAR := $(MY_VAR_2)
# $(MY_VAR) is bar here.
对于带有 +=
的变量,如果该变量之前未通过简单扩展得以赋值,那么附加到该变量时需使用递归扩展。如果您不确定该变量之前是否已赋值,可将 +=
替换成 MY_VAR := $(strip $(MY_VAR) new_value)
。
移除延迟扩展也可以加快对 Makefile 的评估,即使在转换到 Starlark 的作业完成之前也可以。如果变量已设为高开销函数调用的结果,则通过简单扩展只能调用该函数一次,但通过递归扩展或许能调用该函数多次。
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-08-03。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2024-08-03。"],[],[],null,[]]