【发布时间】:2016-08-21 19:52:36
【问题描述】:
考虑这个带有 GNU Make 的 Makefile(用制表符替换 @echo 之前的空格):
BAR := outside
foo:
@echo $(FOO)
foo: BAR := inside
foo: FOO := $(BAR)
.PHONY: foo
输出为inside。如果我交换两个特定于目标的分配的顺序,我会得到outside。这让我相信特定于目标的变量是按照它们写入的顺序分配的。
这真的有记录吗?换句话说,我可以依赖它吗?这种行为是有道理的,但我在文档中找不到任何提及。
我能找到的最接近的是:
与自动变量一样,这些值仅在目标配方的上下文中可用(以及在其他特定于目标的分配中)。 1
它承认特定于目标的变量可以用于特定于目标的赋值,但没有说明是否像正常赋值一样处理赋值顺序。
发布的代码只是一个最小的示例,实际代码大约 800 行拆分为多个文件,基于我编写的元编程模板系统,为各种设备动态生成 lots 目标(这是一个裸机 SDK)在不同的构建配置中。出现这种情况的一个示例是将链接器映射添加到LDFLAGS 以用于调试目标,映射路径取决于设备风味元组,该元组是链接阶段的目标特定变量。现在我使用我的模板系统来解决它,但是能够依赖特定于目标的变量的赋值顺序会使一些事情变得不那么冗长。
【问题讨论】: