इस तरह व्यंजनों से सावधान रहें
target:
MY_ID=$(GENERATE_ID);
echo $MY_ID;
यह दो काम गलत करता है। नुस्खा में पहली पंक्ति को दूसरी पंक्ति से एक अलग शेल उदाहरण में निष्पादित किया जाता है। इस बीच चर खो जाता है। दूसरी बात गलत है कि $
बच नहीं रहा है।
target:
MY_ID=$(GENERATE_ID); \
echo $$MY_ID;
दोनों समस्याओं को ठीक कर दिया गया है और परिवर्तनशील है। बैकस्लैश दोनों लाइनों को एक सिंगल शेल में चलाने के लिए जोड़ती है, इसलिए वेरिएबल की सेटिंग और वेरिएबल आफ्टरवर्ड की रीडिंग काम करती है।
मुझे लगता है कि मूल पोस्ट ने कहा कि शेल कमांड के परिणाम को MAKE वेरिएबल में कैसे लाया जाता है, और यह उत्तर दिखाता है कि इसे शेल वेरिएबल में कैसे लाया जाए। लेकिन अन्य पाठकों को फायदा हो सकता है।
एक अंतिम सुधार, अगर उपभोक्ता एक "पर्यावरण चर" सेट होने की उम्मीद करता है, तो आपको इसे निर्यात करना होगा।
my_shell_script
echo $MY_ID
मेकफाइल में इसकी आवश्यकता होगी
target:
export MY_ID=$(GENERATE_ID); \
./my_shell_script;
आशा है कि किसी की मदद करता है। सामान्य तौर पर, किसी को भी व्यंजनों के बाहर किसी भी वास्तविक कार्य को करने से बचना चाहिए, क्योंकि यदि कोई d -dry-run ’विकल्प के साथ मेकफाइल का उपयोग करता है, तो केवल यह देखने के लिए कि वह क्या करेगा, इसका कोई अवांछनीय दुष्प्रभाव नहीं होगा। प्रत्येक $(shell)
कॉल का संकलन समय पर मूल्यांकन किया जाता है और कुछ वास्तविक कार्य गलती से हो सकते हैं। वास्तविक कार्य को छोड़ने के लिए बेहतर है, जैसे आईडी बनाना, व्यंजनों के अंदर जब संभव हो।