递归扩展
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
请勿在产品/开发板配置 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。
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"没有我需要的信息"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"太复杂/步骤太多"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"内容需要更新"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"翻译问题"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"示例/代码问题"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"其他"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"易于理解"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"解决了我的问题"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"其他"
}]
{"lastModified": "\u6700\u540e\u66f4\u65b0\u65f6\u95f4 (UTC)\uff1a2024-08-03\u3002"}
[[["易于理解","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。"]]