2013-03-05 76 views
12

我有一个目标一个Makefile里:设置环境变量内目标

all: $(TARGETS) 

我想,只有它设置一个环境变量的事实,从不同all一个变种。喜欢的东西:

all-abc: $(TARGETS) 
    ABC=123 

但由于设置变量之前的依赖关系处理不起作用。我曾想过在设置环境变量的真正的依赖项之前有另一个依赖项,但我认为环境不会跨越目标。也就是说,

abc: 
    ABC=123 
all-abc: abc $(TARGETS) 

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

$ make all-abc 

,而不是

$ ABC=123 make 

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

(GNU使3.82)

+0

出了什么问题'让所有ABC = 123'? – Beta 2013-03-05 17:51:49

+1

宁愿不必担心将变量设置为的值(即在示例中我不想记住'123') – starfry 2013-03-05 18:09:58

回答

20

试试这个:

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` 
+0

是的,这很好。我没想到添加两个具有相同名称的目标。好的! – starfry 2013-03-05 18:13:00

+1

starfry:我不认为你明白这是做什么。您应该阅读关于特定于目标的变量的GNU make手册部分。 – MadScientist 2013-03-06 12:59:15

+2

要添加到@MadScientist所说的内容:这里没有两个具有相同名称的目标。 “all-abc:ABC = 123”定义了一个特定于目标的变量;它不是目标。 http://www.gnu.org/software/make/manual/html_node/Target_002dspecific.html – 2013-04-04 21:38:09