मैं सीख रहा हूं कि कैसे उपयोग करना make
और बनाना है, इसलिए मैंने यह छोटी फाइल लिखी:
%.markdown: %.html
pandoc -o $< $@
लेकिन जब मैं दौड़ता हूं तो मुझे जो make
कुछ मिलता है वह सब make: *** No targets. Stop.
चल जाता है।
मैं सीख रहा हूं कि कैसे उपयोग करना make
और बनाना है, इसलिए मैंने यह छोटी फाइल लिखी:
%.markdown: %.html
pandoc -o $< $@
लेकिन जब मैं दौड़ता हूं तो मुझे जो make
कुछ मिलता है वह सब make: *** No targets. Stop.
चल जाता है।
जवाबों:
आप समस्या यह है कि make
अपने लक्ष्यों के बारे में पता नहीं है।
आप make stackoverflow.markdown
उदाहरण के लिए अपने ऊपर मेकफाइल चला सकते हैं और यह काम करेगा।
make
केवल, हालांकि, विफल हो जाएगा, क्योंकि आपने केवल यह निर्दिष्ट किया था कि अपने लक्ष्य कैसे बनाएं, लेकिन कौन सा नहीं।
जैसा कि लिआज़ बिंदु से ऊपर के पैटर्न नियम को एक अंतर्निहित नियम कहा जाता है ।
SRC = $(wildcard *.html)
TAR = $(SRC:.html=.markdown)
.PHONY: all clean
all: $(TAR)
%.markdown: %.html
pandoc -o $< $@
clean:
rm -f $(TAR)
SRC
.html
Makefile के माध्यम से सभी स्रोत फ़ाइलें (वे समाप्त हो रही हैं ) प्राप्त करें wildcard
।
टीएआर विकल्प प्रत्येक स्रोत में सूचीबद्ध फ़ाइल SRC
लक्ष्य के साथ समाप्त होने के साथ .markdown
के बजाय .html
।
.PHONY उन गैर-भौतिक लक्ष्यों को सूचीबद्ध करता है जो हमेशा आउट-ऑफ़-डेट होते हैं और इसलिए हमेशा निष्पादित होते हैं - ये अक्सर all
और होते हैं clean
।
लक्ष्यall
(के दाईं ओर सूचीबद्ध फ़ाइलों निर्भरता के रूप में है :
सब) *.markdown
फ़ाइलें। इसका मतलब है कि इन सभी लक्ष्यों को अंजाम दिया गया है।
%.markdown: %.html
pandoc -o $< $@
इस स्निपेट में कहा गया है: समाप्त होने वाले प्रत्येक लक्ष्य .markdown
को उसी नाम वाली फ़ाइल पर निर्भर किया जाता है, सिवाय इसके कि निर्भरता समाप्त हो रही है .html
। वाइल्डकार्ड%
एक के रूप में देखा जा रहा है *
खोल में की तरह। %
सही पक्ष पर, तथापि, बाईं ओर मैच की तुलना में है। स्रोत ।
ध्यान दें कि व्हॉट्सएप सीक्वेंस infront pandoc
है a TAB, क्योंकि make
यह एक मानक के रूप में परिभाषित करता है।
अंत में, इस clean
टारगेट को इस मेकफाइल के साथ आपके द्वारा बनाई गई फाइलों से अपने सिस्टम को साफ करने का तरीका दिखाया गया है। इस मामले में, यह सभी लक्ष्यों (उन फ़ाइलों को हटा रहा है जिन्हें नाम दिया गया था *.markdown
।
makefile
खरोंच से फाइल बना सकते हैं या यह केवल मौजूदा फ़ाइलों को अद्यतन करता है? क्योंकि जब मैं उत्पन्न फ़ाइलों को हटाता हूं, तो यह काम करना बंद कर देता है। बेवकूफ सवाल मुझे पता है, लेकिन यह मेरे लिए न्यूफाउंडलैंड है ^^ "
पैटर्न नियम अंतर्निहित नियम हैं।
आपके Makefile में आपके कोई लक्ष्य निर्धारित नहीं हैं। आप कमांड लाइन पर लक्ष्य को निर्दिष्ट कर सकते हैं: make something.markdown
बनाने के लिए नुस्खा का उपयोग करेगा something.markdown
से something.html
।
या आप अपने Makefile को डिफ़ॉल्ट लक्ष्य निर्दिष्ट करने वाला नियम जोड़ सकते हैं।
all: file1.markdown file2.markdown
all: *.markdown
जब आप बस चलाते हैं make
, तो पहले नियम का पहला लक्ष्य डिफ़ॉल्ट लक्ष्य होता है । इसे बुलाने की जरूरत नहीं है all
।
तो ऊपर, लक्ष्य में all
वे सभी फाइलें हैं जिन्हें आप किसी और चीज के रूप में बनाना चाहते हैं, इसलिए जब आप make all
, यह सभी सूचीबद्ध फाइलों को बना देगा।
pandoc
कमांड के सामने एक टैब है । बनाओ एक टैब नहीं होने के बारे में कुख्यात picky है और रिक्त स्थान नहीं है।