2015-03-03 2 views
5

उपयोग करने के लिए बनाते हैं। मैं संस्करण 3.81 के साथ काम कर रहा हूं, जो supposed to use the first rule it comes to है, लेकिन ऐसा लगता है कि अधिक विशिष्ट नियम पर निर्भरता है जिसे किसी अन्य नियम के साथ बनाया जाना चाहिए। मैं make चाहते .bbl फ़ाइल के साथ पीडीएफ निर्माण करने के लिएसेना मैं एक अधिक विशिष्ट नियम का उपयोग करने के लिए <code>make</code> मजबूर करने के लिए नहीं कर पा रहे एक अधिक विशिष्ट नियम

#rule for the dependency of the more specific rule 
%.bbl: %.tex *.bib 
    <build the .bbl file> 

#more specific rule 
some_prefix%.pdf: some_prefix%.tex some_prefix%.bbl 
    <build the .pdf> 

#general rule 
%.pdf: %.tex 
    <build the .pdf> 

तो मूल रूप से अगर यह some_prefix से मेल खाता है, नहीं तो और अधिक सामान्य नियम का उपयोग: यहाँ बुनियादी चित्र है। दुर्भाग्यवश, जब तक कि मैं .bbl फ़ाइल पर निर्भरता को हटा नहीं देता, दूसरा नियम कभी नहीं कहा जाता है।

मैं सामान्य नियम के लिए एक हैक जोड़कर यह काम कर रहा प्राप्त करने में सक्षम होने लगते हैं:

%.pdf: %.tex %.hack 
    <make the pdf with a more general rule> 

%.hack: %.tex 
    touch [email protected] 

यह काम करने के लिए लगता है, और .hack फ़ाइलें स्वचालित रूप से नष्ट हो जाती हैं, लेकिन जैसा कि नाम का तात्पर्य, यह है एक भयानक हैक। ऐसा लगता है कि विशिष्ट नियम के उपयोग को मजबूर करने के लिए कुछ बेहतर तरीका होना चाहिए।

मैं अधिक विशिष्ट नियम का उपयोग करने के लिए कैसे मजबूर कर सकता हूं? इसे पहले रखना मदद में प्रतीत नहीं होता है।

+0

कि '% .bbl' नियम सही तरीके से काम करता है? जब आप 'some_prefix_something.tex' और यादृच्छिक' * .bib' फ़ाइलें मौजूद होते हैं और यह सही तरीके से काम करते हैं, तो क्या आप 'some_prefix_something.bbl' बना सकते हैं'? 'मेक-डी' क्या कहता है जब यह आपके नियम का उपयोग आपके द्वारा अपेक्षित तरीके से नहीं करता है? –

+0

@EtanReisner, यह दिलचस्प है: अगर मैं पहले '.bbl' फ़ाइल बना देता हूं और फिर' .pdf' यह काम करता है। रन बनाने के बाद '.bbl' फ़ाइल सामान्य रूप से हटा दी जाती है, हालांकि (जो मैं चाहता हूं), इसलिए यह स्पष्ट रूप से' .bbl' को स्पष्ट किए बिना काम नहीं करता है। – Shep

+1

यह वही है जो मैं नीचे दिए गए मेरे उत्तर से अपेक्षा करता हूं: जब 'bbl' फ़ाइलें मौजूद होती हैं तो एल्गोरिदम का चरण # 5 लागू होता है क्योंकि पूर्वापेक्षाएँ फ़ाइल पहले से मौजूद है। यह तब होता है जब फाइलें मौजूद नहीं होती हैं, जिससे उन्हें बनाने के लिए नियम श्रृंखला का उपयोग करने की आवश्यकता होती है। – MadScientist

उत्तर

4

आप implicit rule search algorithm का एक बहुत ही महत्वपूर्ण पहलू भूल जाते हैं: makeहमेशा जो आवश्यक शर्तें जो स्पष्ट लक्ष्य कर रहे हैं, एक अंतर्निहित नियम से अधिक निहित नियमों पसंद जहां शर्त पैटर्न में से एक एक ज्ञात लक्ष्य से मेल नहीं खाता और निर्मित किया जाना चाहिए नियम श्रृंखला द्वारा। एल्गोरिदम में चरण # 5 देखें, बनाम चरण # 6। पैटर्न पैटर्न के क्रम में सामान्य "मेकफ़ाइल में पहले" सामान्य से अलग है।

यदि आप ऐसा करना चाहते हैं तो आपको bbl नियम को एक स्थिर पैटर्न नियम के रूप में लिखना होगा, वास्तविक पैटर्न नियम नहीं, ताकि bbl फ़ाइलें स्पष्ट लक्ष्य स्पष्ट लक्ष्य न हों।

+0

मैं 'बीबीएल' नियम को स्थिर पैटर्न नियम के रूप में कैसे लिखूं? – Shep

+3

आपको 'bbl' फ़ाइलों की एक सूची चाहिए:' BBL_FILES = foo.bbl bar.bbl biz.bbl' फिर आप पैटर्न नियम परिचय को $ $ (BBL_FILES) में बदलते हैं:% .bbl:% .tex * .bib' (और शेष नियम)। अब यह एक स्थिर पैटर्न नियम है। – MadScientist

+3

मुझे यह इंगित करना चाहिए कि स्थिर पैटर्न नियम इसे हल करने का एकमात्र तरीका नहीं हैं। आपको इन बीबीएल फाइलों को किसी भी तरह से बनाने के लिए "ज्ञात" होना चाहिए। मेकफ़ाइल में लक्ष्य (पूर्वनिर्धारित) के रूप में उन्हें सूचीबद्ध करें (स्पष्ट रूप से) _anywhere_ पर्याप्त है। उदाहरण के लिए उपरोक्त परिवर्तनीय असाइनमेंट दिया गया है, आप केवल एक नया नियम 'make_bbls: $ (BBL_FILES) लिख सकते हैं और यह पर्याप्त होगा। आपको 'make_bbls' पर निर्भर रहने के लिए कुछ भी चाहिए नहीं; बस उस नियम का अस्तित्व पर्याप्त है। – MadScientist

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