2013-03-05 24 views
12

अंदर मैं एक makefile अंदर लक्ष्य है:सेट वातावरण चर लक्ष्य

all: $(TARGETS) 

मैं एक संस्करण है कि केवल तथ्य यह है कि यह एक वातावरण चर सेट द्वारा all से अलग करना चाहते हैं। कुछ ऐसा:

all-abc: $(TARGETS) 
    ABC=123 

लेकिन यह काम नहीं करता है क्योंकि चर सेट करने से पहले निर्भरता संसाधित की जाती है। मैंने उन वास्तविक लोगों से पहले एक और निर्भरता रखने के बारे में सोचा है जो सिर्फ पर्यावरण चर सेट करता है लेकिन मुझे नहीं लगता कि पर्यावरण लक्ष्य में बनी हुई है। यही कहना है कि

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

काम नहीं करता है। क्या मैं अंत में करने के लिए सक्षम होना चाहता हूँ

$ make all-abc 

बजाय

$ ABC=123 make 

इसे इस तरह एक वातावरण चर सेट करना संभव है है?

+0

क्या बुराई है 'सभी एबीसी = 123' बनाते हैं? – Beta

+1

चर को सेट करने के लिए मानों के बारे में चिंता करने की आवश्यकता नहीं है (यानी उदाहरण में मैं '123' याद रखना नहीं चाहता) – starfry

उत्तर

20

इस कोशिश (जीएनयू 3.82 के साथ):

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

+1

स्टारफ्री: मुझे नहीं लगता कि आप समझ रहे हैं कि यह वास्तव में क्या करता है। आपको लक्ष्य-विशिष्ट चर पर जीएनयू बनाने के मैनुअल के अनुभाग को पढ़ना चाहिए। – MadScientist

+2

@MadScientist ने जो कहा है उसे जोड़ने के लिए: यहां एक ही नाम के साथ दो लक्ष्य नहीं हैं। "ऑल-एबीसी: एबीसी = 123" एक लक्ष्य-विशिष्ट चर परिभाषित करता है; यह एक लक्ष्य नहीं है। http://www.gnu.org/software/make/manual/html_node/Target_002dspecific.html –

संबंधित मुद्दे