2011-01-24 15 views
11

में नियम के लिए पैरामीटर मुझे मेकफ़ाइल बनाने की आवश्यकता है, और इसमें run नियम होना चाहिए। हालांकि, रन को कुछ पैरामीटर की आवश्यकता होती है।मेकफ़ाइल

क्या किसी को यह पता है कि मेकफ़ाइल में नियम चलाने पर मैं तर्क कैसे पारित कर सकता हूं? मैं make run foo bar टाइप करके run नियमों को तर्क के साथ चलाने में सक्षम होना चाहता हूं।

मैं इस कोशिश की, लेकिन यह काम नहीं किया:

run: 
    make compile 
    ./scripts/runTrips $1 $2 $PLACES $OUT $VERS 

मापदंडों मैं आपूर्ति चाहते हैं पहले और दूसरे हैं।

उत्तर

21

जब कोई कमांड कमांड पर पैरामीटर पास करते हैं, तो उन्हें संदर्भ दें जैसे कि आप अन्य आंतरिक बनाने वाले चर होंगे।

अपने makefile लग रहा है जैसे:

run: 
     script $(param1) $(param2) 

आप निम्न सिंटैक्स से कॉल करने की कर सकते हैं:

$> make run param1=20 param2=30 

और तरह स्क्रिप्ट बुलाना चाहिए बनाने:

script 20 30 
+1

यह वास्तव में काम करता है, लेकिन मैं इसे चलाने जब मैं लिखने के लिए कर सकते हैं: बनाने $> चलाने (और नहीं param1 = ....) – amit

+4

@amit जीआर: नहीं, 'की तरह रन बनाने के कुछ' है संभव नहीं है क्योंकि 'मेक' इसे लक्ष्य नाम के रूप में समझना चाहता है। उदाहरण के लिए 'सभी इंस्टॉल करें' पर विचार करें: पहला लक्ष्य "सब" संसाधित किया गया है, फिर लक्ष्य "इंस्टॉल करें"। सब कुछ जो आप एक प्रकार का पैरामीटर बनना चाहते हैं उसे 'key = value' वाक्यविन्यास (या उसी नाम के पर्यावरण चर) के माध्यम से पारित किया जाना है। – DarkDust

2

खुद बनाओ स्क्रिप्ट के लिए गुजरने वाले तर्क प्रदान नहीं करता है। आम तौर पर निम्न तरीके से उपयोग किया जाता है: आप केवल सरल 'मेक' चलाने से प्रोजेक्ट को कॉन्फ़िगर करते हैं। शेल स्क्रिप्ट 'कॉन्फ़िगरेशन' चलाकर कॉन्फ़िगर किया जा सकता है। यह स्क्रिप्ट वह है जिसे आप पैरामीटर पास कर सकते हैं। उदाहरण के लिए:

./configure param1 param2 
make run 

कॉन्फ़िगरेशन स्क्रिप्ट पैरामीटर को पार्स करना चाहिए और उन्हें config.mk पर लिखना चाहिए। config.mk निम्नलिखित शामिल होना चाहिए:

TOP = . 
include $(TOP)/config.mk 

run: 
    make compile 
    ./scripts/runTrips $(PARAM1) $(PARAM2) $(PLACES) $(OUT) $(VERS) 

अपने 'कॉन्फ़िगर' आप भी शुद्धता के लिए मानकों की जांच और अन्य चेक और गणना कर सकते हैं स्क्रिप्ट में:

PARAM1 = val1 
PARAM2 = val2 

आपका Makefile config.mk शामिल करना चाहिए।