在目标内设置 Makefile 变量
Posted
技术标签:
【中文标题】在目标内设置 Makefile 变量【英文标题】:Set Makefile variable inside target 【发布时间】:2013-03-05 17:06:42 【问题描述】:我在 makefile 中有一个目标:
all: $(TARGETS)
我想要一个与all
不同的变体,只是它设置了一个环境变量。比如:
all-abc: $(TARGETS)
ABC=123
但这不起作用,因为在设置变量之前会处理依赖项。我考虑过在真正设置环境变量之前有另一个依赖项,但我认为环境不会跨目标持续存在。也就是说
abc:
ABC=123
all-abc: abc $(TARGETS)
不起作用。我最终想做的是
$ make all-abc
而不是
$ ABC=123 make
可以这样设置环境变量吗?
(GNU Make 3.82)
【问题讨论】:
make all ABC=123
有什么问题?
希望不必担心将变量设置为的值(即在示例中我不想记住123
)
【参考方案1】:
试试这个:
all:
@#usual rule, if you call `make all-abc`, this will print "123"
@echo $(ABC)
all-abc: ABC=123
all-abc: all
@#what you put here it's going to be executed after the rule `all`
【讨论】:
是的,这很好。我没有想到要添加两个同名的目标。不错! starfry:我认为你不明白这到底是做什么的。您应该阅读 GNU make 手册中关于目标特定变量的部分。 补充@MadScientist 所说的:这里没有两个同名的目标。 "all-abc: ABC=123" 定义了一个特定于目标的变量;它不是目标。 gnu.org/software/make/manual/html_node/Target_002dspecific.html 我在目标命令中使用xargs
,我需要执行all-abc: export ABC=123
以使变量可以从xargs 执行的命令中访问以上是关于在目标内设置 Makefile 变量的主要内容,如果未能解决你的问题,请参考以下文章
makefile.am 变量在 make 命令中的目标文件之后设置一些库