मैं सीख रहा हूं कि कैसे उपयोग करना 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.htmlMakefile के माध्यम से सभी स्रोत फ़ाइलें (वे समाप्त हो रही हैं ) प्राप्त करें 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 है और रिक्त स्थान नहीं है।