2013-03-05 122 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