/ / मेकफ़ाइल: लक्ष्य-विशिष्ट चर हमेशा हल किए जाते हैं - बैश, शेल, मेकफ़ाइल, ग्नू-मेक

मेकफाइल: लक्ष्य-विशिष्ट चर हमेशा हल होते हैं - बैश, शेल, मेकफाइल, ग्नू-मेक

निम्नलिखित को धयान मे रखते हुए Makefile:

foo: FOOVAR:=$(shell prog_to_execute_only_on_foo)
foo:
echo "foo"

bar:
echo "bar"

मैं दौड़ने में सक्षम होना चाहूंगा make bar शेल कमांड को हल किए बिना FOOVAR.

क्या यह संभव है?

यदि नहीं, तो क्या इसके आसपास काम करने का कोई तरीका है? यह सुनिश्चित करने के लिए कि चल रहे शेल कमांड को निष्पादित नहीं किया जाएगा make bar?

उत्तर:

जवाब के लिए 2 № 1

आप इसे परिभाषित करके प्राप्त कर सकते हैं FOOVAR के रूप में पुनरावर्ती रूप से विस्तारित चर के बजाय एक बस विस्तारित चर (यानी, का उपयोग करके = के बजाय :=):

foo: FOOVAR = $(shell prog_to_execute_only_on_foo)
foo:
echo "foo"

इस तरफ prog_to_execute_only_on_foo जब निष्पादित किया जाएगा FOOVAR का विस्तार किया गया है।

हालांकि, ध्यान दें, कि prog_to_execute_only_on_foo निष्पादित किया जाएगा हर बार उस FOOVAR का विस्तार किया जाता है, जबकि के लिए बस विस्तारित चर (अर्थात।, :=) इसे केवल निष्पादित किया जाएगा बार.