Makefile 制定特定于目标的分配顺序
考虑使用GNU Make创建此Makefile(用选项卡替换Makefile 制定特定于目标的分配顺序,makefile,gnu-make,Makefile,Gnu Make,考虑使用GNU Make创建此Makefile(用选项卡替换@echo之前的空格): 输出为内部。如果我交换两个特定于目标的分配的顺序,我会得到外部的。这让我相信,特定于目标的变量是按照它们被写入的顺序分配的 这是否有文档记录?换句话说,我能依靠它吗?这种行为是有道理的,但我在文档中找不到任何提及 我能找到的最接近的东西是: 与自动变量一样,这些值仅在目标配方的上下文中可用(以及在其他特定于目标的分配中) 它承认特定于目标的变量可以在特定于目标的赋值中使用,但没有说明赋值顺序是否像正常赋值那样处
@echo
之前的空格):
输出为内部
。如果我交换两个特定于目标的分配的顺序,我会得到外部的。这让我相信,特定于目标的变量是按照它们被写入的顺序分配的
这是否有文档记录?换句话说,我能依靠它吗?这种行为是有道理的,但我在文档中找不到任何提及
我能找到的最接近的东西是:
与自动变量一样,这些值仅在目标配方的上下文中可用(以及在其他特定于目标的分配中)
它承认特定于目标的变量可以在特定于目标的赋值中使用,但没有说明赋值顺序是否像正常赋值那样处理
发布的代码只是一个很小的例子,实际代码是在多个文件上分割约800行,基于我编写的元编程模板系统,该系统以不同的构建配置为各种设备(它是裸机SDK)生成大量目标。出现这种情况的一个例子是为调试目标向LDFLAGS
添加链接器映射,映射路径取决于设备风格元组,该元组是链接阶段的目标特定变量。现在我用我的模板系统解决这个问题,但是,能够依赖目标特定变量的赋值顺序会使某些事情变得不那么冗长。我认为这并不奇怪-两种赋值都是即时的,因此顺序与全局变量的顺序完全相同。手册没有明确保证这种行为,但是,当你认为目标特定变量只确定变量名的范围,而不是如何设置和设置变量时,这是不言而喻的。
也就是说,这两者之间没有区别
foo: BAR := inside
foo: FOO := $(BAR)
还有这个
BAR := inside
FOO := $(BAR)
除了第一个示例在向上移动链之前首先在foo
范围内查找BAR
的定义,并且生成的定义将仅在foo
范围内可用,“目标特定变量仅确定范围”:现在更清楚了。谢谢。另外,在第十次阅读文档后,我发现我遗漏了:“变量分配中出现的所有变量都是在目标上下文中进行评估的:因此,任何先前定义的特定于目标的变量值都将生效。”。
BAR := inside
FOO := $(BAR)