আমি কীভাবে ব্যবহার 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
মেকফিলের মাধ্যমে সমস্ত উত্স ফাইল (যারা শেষ হয় ) পান wildcard
।
টিএআর কর্মের পরিবর্তে প্রতিটি উৎস তালিকাভুক্ত ফাইল SRC
একটি টার্গেট দিয়ে শেষ সঙ্গে .markdown
পরিবর্তে .html
।
.ফোনটি অ-শারীরিক লক্ষ্যগুলি তালিকাভুক্ত করে যা সর্বদা অতিক্রান্ত থাকে এবং তাই সর্বদা কার্যকর করা হয় - এগুলি প্রায়শই all
এবং clean
।
লক্ষ্যall
(ডান দিকে তালিকাভুক্ত ফাইল নির্ভরতা যেমন রয়েছে :
সব) *.markdown
ফাইল। এর অর্থ এই সমস্ত লক্ষ্যমাত্রা কার্যকর করা হয়।
%.markdown: %.html
pandoc -o $< $@
এই স্নিপেটটি বলে: প্রতিটি টার্গেটের সমাপ্তি .markdown
একই নামের একটি ফাইলের উপর নির্ভর করে, নির্ভরতাটি শেষ হয়ে যাওয়া ব্যতীত .html
। ওয়াইল্ডকার্ড%
একটি হিসেবে দেখা যেতে হয় *
শেল মত। %
ডান দিকে অবশ্য বাম পাশে ম্যাচ সাথে তুলনা করা হয়। উত্স ।
নোট করুন যে শ্বেত স্পেস সিকোয়েন্স ইনফ্রন্টটি pandoc
হ'ল একটি TAB, যেহেতু make
এটি একটি স্ট্যান্ডার্ড হিসাবে সংজ্ঞায়িত হয়।
অবশেষে, ফোনি clean
টার্গেটে এই মেকফিলের সাহায্যে তৈরি করা ফাইলগুলি থেকে আপনার সিস্টেমকে কীভাবে পরিষ্কার করা যায় তা চিত্রিত করা হয়। এই ক্ষেত্রে, এটি সমস্ত লক্ষ্যবস্তু মুছে ফেলছে (সেই ফাইলগুলির নাম দেওয়া হয়েছিল) *.markdown
।
makefile
স্ক্র্যাচ থেকে ফাইল তৈরি করতে পারে বা এটি কেবল বিদ্যমান ফাইলগুলি আপডেট করে? কারণ আমি যখন উত্পন্ন ফাইলগুলি মুছব তখন এটি কাজ করা বন্ধ করে দেয়। নির্বোধ প্রশ্ন আমি জানি, তবে এটি আমার কাছে নিউফাউন্ডল্যান্ড ^^ "
প্যাটার্ন বিধিগুলি অন্তর্ভুক্ত নিয়ম।
আপনার মেকফাইলে আপনার কোনও লক্ষ্য নির্ধারিত নেই। কমান্ড লাইনে বিভিন্ন লক্ষ্য নির্দিষ্ট করতে পারেন: make something.markdown
তৈরি করতে রেসিপি ব্যবহার করবে something.markdown
থেকে something.html
।
অথবা আপনি আপনার Makefile এ একটি বিধি যুক্ত করতে পারেন যা ডিফল্ট লক্ষ্যগুলি নির্দিষ্ট করে।
all: file1.markdown file2.markdown
all: *.markdown
আপনি যখন ঠিক রান করেন make
, প্রথম নিয়মের প্রথম লক্ষ্যটি হ'ল ডিফল্ট লক্ষ্য । এটি বলার দরকার নেই all
।
সুতরাং উপরে, লক্ষ্যটিতে all
আপনার পূর্ববর্তী পূর্বশর্ত হিসাবে তৈরি করতে চান এমন সমস্ত ফাইল রয়েছে, সুতরাং যখন আপনি make all
এটি করবেন তখন এটি তালিকাভুক্ত সমস্ত ফাইল তৈরি করবে।
pandoc
কমান্ডের সামনে সেই স্পেসগুলি বা কোনও ট্যাব রয়েছে । মেকগুলি খালি জায়গাগুলি নয় এমন একটি ট্যাব হওয়ার বিষয়ে কুখ্যাত pick