12.7make宏=值
和潜水艇
命令行变量定义,例如foo=巴
覆盖任何定义foo公司
在生成文件中。一些制作
实现(例如GNU制作
)传播这个覆盖子调用制作
.其他一些实现不将替换传递给submake。
$cat生成文件foo=foo一个:@echo$(foo)$(制造)二二:@echo$(foo)$使foo=bar#GNU品牌3.79.1酒吧做两个make[1]:正在进入目录“/home/adl”酒吧make[1]:正在退出目录“/home/adl”$pmake foo=巴#BSD品牌酒吧做两个foo公司
如果您确实想要foo=巴
覆盖传播到子级。一是使用-e(电子)选项,它使所有环境变量优先于makefile宏定义,并将foo声明为环境变量:
这个-e(电子)选项自动传播到子对象,由于环境是在制作
调用foo公司
宏在中被重写如预期的那样进行潜艇试验。
此语法(foo=棒材品牌-e
)仅在使用时才可携带在makefile外部,例如从脚本或命令行。在内部运行时制作
规则,GNU制作
3.80及以前的版本忘记传播-e(电子)选择子脚本。
此外,使用-e(电子)如果您的环境包含一些其他宏,这些宏通常由生成文件。(另请参阅关于品牌-e
和壳牌公司
(见下文)
如果您可以预见用户可能想要覆盖的所有宏,那么您可以从makefile手动将它们传播到子对象:
foo=foo一个:@echo$(foo)$(MAKE)foo=$(foo)二两个:@echo$(foo)
另一种以可移植的方式将变量传播到子函数的方法是在每次调用“$(制造)'内您的生成文件:
foo=foo一个:@echo$(foo)$(制造)$(子制造)两个两个:@echo$(foo)
用户必须意识到,使用此技术是为了利用例如,与make foo=bar SUBMAKEFLAGS='foo=bar'
,但它允许重写任何宏。生成的生成文件汽车制造
使用此技术,展开$(AM_MAKEFLAGS)
在子命令行上(请参见汽车制造在里面可移植的源代码).