2010-10-07 18 views
17

मैं एक Makefile लिख रहा हूँ, और मैं वाइल्डकार्ड के साथ एक सामान्य नियम का उपयोग करना चाहते का एक सेट के लिए makefile में नियम बनाएं,सिर्फ फाइलों

%: bkp/% 
    cp $< [email protected] 

की तरह लेकिन मैं यह नियम केवल कुछ के लिए मान्य बनना चाहता था विशिष्ट फाइलें मैं उदाहरण

file_list = foo.c bar.c zzz.c

के लिए, सूची के साथ एक चर को परिभाषित करने और नियम कॉन्फ़िगर तो यह फ़ाइलों कि इस परिवर्तनीय में सूचीबद्ध हैं के लिए मान्य है चाहता था। मैं उसको कैसे करू?

file_list = foo.c bar.c zzz.c 

$(file_list): %: bkp/% 
     cp $< [email protected] 

वाक्य रचना बहुत करने के लिए implicit pattern rule आप उपयोग कर रहे थे इसी तरह की है:

+0

तुम बस 'ग' फ़ाइलों की सूची से हल किया जा सकता है; निर्देशिका में अन्य '.c' फाइलें हैं? क्या ऐसी कोई अन्य फाइलें हैं जिनकी बैक अप लेने की आवश्यकता है? यदि आप एक और '.c' फ़ाइल जोड़ते हैं, तो क्या उसे भी सहेजने की आवश्यकता होगी? और आप अपने काम की सुरक्षा के लिए संस्करण नियंत्रण प्रणाली (वीसीएस) का उपयोग क्यों नहीं कर रहे हैं? –

+0

@ जोनाथन: ... आप कैसे अनुमान लगाते हैं कि वह वीसीएस का उपयोग नहीं कर रहा है? –

+0

@ जोनाथन यदि आपको वास्तव में जानने की ज़रूरत है, तो मैं यही कर रहा हूं, और मैं केवल वाइल्डकार्ड का उपयोग क्यों नहीं कर सका: मैंने अपनी होम निर्देशिका में एक "myconfig" निर्देशिका बनाई जो VCS पर है। इस निर्देशिका में मेरी होम निर्देशिका में फ़ाइलों की प्रतियां हैं, जैसे ~/.bashrc, ~/.emacs और अन्य। मैं नियम चाहता हूं कि मूल फ़ाइल को इस निर्देशिका में कॉपी करें, लेकिन मैं इसे सुरक्षित बनाना चाहता हूं, और उदा। इस निर्देशिका में मेकफ़ाइल पर मेरी होम निर्देशिका से मेकफ़ाइल कॉपी करना। – dividebyzero

उत्तर

24

आप एक static pattern rule चाहते हैं। और हाँ, यह आमतौर पर सुरक्षित (अधिक अनुमानित) है।

5
बेशक

, 5 मिनट बाद मैं इस सवाल का जवाब अपने आप को पाया ... :)

हम क्या जरूरत है एक स्थिर पैटर्न नियम है।

http://www.gnu.org/software/make/manual/make.html#Static-Pattern

इसलिए उदाहरण

$(file_list) : % : bkp/% 
    cp $< [email protected] 
+0

'file_list' ->' $ (file_list) 'और मैं +1 कर दूंगा। –

+0

ओह! धन्यवाद! :) – dividebyzero

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