2010-03-23 24 views
24

से एक बैश स्क्रिप्ट चला रहा है मेरे पास एक मेकफ़ाइल है जिसमें से मैं इमारत के दूसरे हिस्से को करने के लिए एक और बाहरी बैश स्क्रिप्ट कॉल करना चाहता हूं। मैं यह करने के बारे में सबसे अच्छा कैसे जाना होगा।एक मेक फ़ाइल

उत्तर

24

बस एक makefile से किसी भी अन्य आदेश बुला की तरह:

target: prerequisites 
    shell_script arg1 arg2 arg3 

अपने अधिक विवरण के बारे में:

.PHONY: do_script 

do_script: 
    shell_script arg1 arg2 arg3 

prerequisites: do_script 

target: prerequisites 
+0

लेकिन मुझे पूर्व शर्त –

+0

@ मैथ्यू से पहले स्क्रिप्ट चलाने की आवश्यकता है, तो आपकी मेकफ़ाइल गलत तरीके से स्थापित की गई है। नया '.PHONY' लक्ष्य बनाएं कि आपकी पूर्वापेक्षाएँ उस पर निर्भर करती हैं, और उस लक्ष्य में स्क्रिप्ट चलाती हैं। –

+0

आपके मामले के लिए और अधिक के साथ संपादित करें। –

5

makefile शासन में कार्रवाई में से प्रत्येक एक आदेश है कि एक में मार डाला हो जाएगा subshell। आपको यह सुनिश्चित करने की ज़रूरत है कि प्रत्येक आदेश स्वतंत्र है, क्योंकि प्रत्येक एक अलग सबहेल के अंदर चलाया जाएगा।

इस कारण से, आप अक्सर देखेंगे पंक्ति विराम भाग निकले जब लेखक एक ही subshell में चलाने के लिए कई आदेशों चाहता है:

targetfoo: 
     command_the_first foo bar baz 
     command_the_second wibble wobble warble 
     command_the_third which is rather too long \ 
      to fit on a single line so \ 
      intervening line breaks are escaped 
     command_the_fourth spam eggs beans 
0
नहीं

शायद "सही" जिस तरह से जवाब पहले से ही प्रदान की जाती है जैसे कि यह क्या करने के लिए , लेकिन मैं इस सवाल पर आया क्योंकि मैं चाहता था कि मेरी मेकफ़ाइल एक स्क्रिप्ट चलाने के लिए लिखा जो मैंने एक हेडर फ़ाइल जेनरेट करने के लिए लिखा था जो सॉफ़्टवेयर के पूरे पैकेज के लिए संस्करण प्रदान करेगा। मेरे पास इस पैकेज में काफी लक्ष्य हैं, और उन सभी के लिए एक नई नई शर्त नहीं जोड़ना चाहते थे। मेरी makefile की शुरुआत की दिशा में यह लाना मुझे

$(shell ./genVer.sh) 

जो बताता है बस एक शेल कमांड को चलाने के लिए बनाने के लिए काम किया। ./genVer.sh पथ (मेकफ़ाइल के समान निर्देशिका) और चलाने के लिए मेरी स्क्रिप्ट का नाम है। यह कोई फर्क नहीं पड़ता कि मैं कौन सा लक्ष्य निर्दिष्ट करता हूं (clean सहित, जो नकारात्मक है, लेकिन आखिरकार मेरे लिए एक बड़ा सौदा नहीं है)।

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