在目标内设置 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 命令中的目标文件之后设置一些库

如果未设置变量,如何中止makefile?

在 makefile 上取消设置环境变量

makefile 特殊变量

makefile.am 可以为一组目标设置 LDADD 吗?

更改目标主体内的 Makefile 变量值