在目标内设置环境变量

sta*_*fry 20 makefile

我在makefile中有一个目标:

all: $(TARGETS)
Run Code Online (Sandbox Code Playgroud)

我想要一个变体,all它不仅仅是因为它设置了一个环境变量.就像是:

all-abc: $(TARGETS)
    ABC=123
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为在设置变量之前处理依赖项.我已经考虑过在设置环境变量的实际依赖之前有另一个依赖,但我不认为环境会在目标之间持续存在.也就是说

abc:
    ABC=123
all-abc: abc $(TARGETS)
Run Code Online (Sandbox Code Playgroud)

不起作用.我最终希望能做的是

$ make all-abc
Run Code Online (Sandbox Code Playgroud)

代替

$ ABC=123 make
Run Code Online (Sandbox Code Playgroud)

是否可以设置这样的环境变量?

(GNU Make 3.82)

RSF*_*on7 25

试试这个:

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`
Run Code Online (Sandbox Code Playgroud)

  • starfry:我不认为你理解这到底是做什么的。您应该阅读 GNU make 手册中有关特定于目标的变量的部分。 (2认同)
  • 要添加@MadScientist所说的内容:这里没有两个具有相同名称的目标."all-abc:ABC = 123"定义了特定于目标的变量; 它不是目标.http://www.gnu.org/software/make/manual/html_node/Target_002dspecific.html (2认同)
  • 我在目标命令中使用“xargs”,并且需要执行“all-abc:export ABC = 123”以使变量可以从 xargs 执行的命令访问 (2认同)