में पूर्वापेक्षाएँ के रूप में लक्ष्य-विशिष्ट वैरिएबल मैं एक जीएनयू बनाने की कोशिश कर रहा हूं मेकफ़ाइल बनाता है जिसमें समान लक्ष्यों का भार होता है, जहां बिल्ड कमांड उनके बीच थोड़ा भिन्न होता है। मैं इन भिन्नताओं का प्रतिनिधित्व करने के लिए target-specific variables का उपयोग करने का प्रयास कर रहा हूं। इनमें से कुछ परिवर्तनीय मान उन फ़ाइलों को संदर्भित करते हैं जिन्हें मैं पूर्वापेक्षाएँ के रूप में उपयोग करना चाहता हूं। उदाहरण के लिए:मेकफ़ाइल
target_1:special_filename=target1_prereq
target_2:special_filename=target2_prereq
target_1 target_2: common_filename $(special_filename)
do_something common_filename --a-weird-option=$(special_filename)
जब मैं कॉल 'target_1 बनाने', मैं इसे target1_prereq बनाने के लिए अगर यह मौजूद नहीं है चाहता हूँ। फिलहाल, यह लक्ष्य 1_prereq को एक शर्त के रूप में उपयोग नहीं करता प्रतीत होता है, भले ही बिल्ड कमांड (do_something) को सही पैरामीटर के साथ बुलाया जाता है।
मैं जीएनयू मेक 3.80 का उपयोग कर रहा हूं।
संपादित करें: वास्तविक प्रणाली से कुछ और जटिलताओं। कुछ चर स्वयं अन्य चर के मूल्यों पर आधारित होते हैं। पूर्व शर्त को मैन्युअल रूप से निर्दिष्ट करना स्केल नहीं करेगा। एक थोड़ा और अधिक जटिल उदाहरण:
target_1:special_filename_base=target1_prereq
target_2:special_filename_base=target2_prereq
some_filename_a = $(special_filename_base).exta
some_filename_b = $(special_filename_base).extb
target_1 target_2: common_filename $(special_filename_b) $(special_filename_a)
do_something common_filename --a-weird-option=$(special_filename_a) --second=$(special_filename_b)
इस धागे को किसी और के लाभ के लिए पुनरुत्थान करना जो इसे पार करता है। एक [अधिक सुरुचिपूर्ण समाधान] (http://stackoverflow.com/questions/9311743/make-using- लक्ष्य- विशिष्ट- variables-in-prerequisites) माध्यमिक विस्तार का उपयोग करता है। – Seth
@ सेठ, मैं सहमत हूं: 'target_1 target_2: common_filename $$ (special_filename_base) .exta $$ (special_filename_base) .extb ...' – Beta