আসলে আপনি ঠিক বলেছেন: এটি মেকের আরেকটি উদাহরণ চালায়। একটি সম্ভাব্য সমাধান হ'ল:
.PHONY : clearscr fresh clean all
all :
compile executable
clean :
rm -f *.o $(EXEC)
fresh : clean clearscr all
clearscr:
clear
কল করে make fresh
আপনি প্রথমে clean
টার্গেটটি পাবেন, তারপরে clearscreen
কোনটি চলে clear
এবং শেষ পর্যন্ত all
কোনটি কাজ করে।
4 আগস্ট সম্পাদনা করুন
মেকের -j
বিকল্পের সাথে সমান্তরাল বিল্ডসের ক্ষেত্রে কী ঘটে ? অর্ডার ঠিক করার একটি উপায় আছে। মেকুয়াল ম্যানুয়াল থেকে বিভাগ ৪.২:
মাঝেমধ্যে, আপনার একটি পরিস্থিতি রয়েছে যেখানে আপনি যদি নিয়মগুলির মধ্যে কোনও একটি কার্যকর করা হয় তবে লক্ষ্য আপডেট করার জন্য জোর না করে নিয়মাবলীর উপর একটি নির্দিষ্ট ক্রম চাপিয়ে দিতে চান। সেক্ষেত্রে আপনি কেবল অর্ডার-পূর্ব শর্তাদি সংজ্ঞায়িত করতে চান। পূর্বশর্ত তালিকায় পাইপ প্রতীক (|) রেখে কেবল অর্ডার-পূর্ব শর্তাদি নির্দিষ্ট করা যেতে পারে: পাইপের প্রতীকের বামে যে কোনও পূর্বশর্ত স্বাভাবিক; ডানদিকে যে কোনও পূর্বশর্ত হ'ল কেবলমাত্র অর্ডার: লক্ষ্যগুলি: সাধারণ পূর্বশর্ত | অর্ডার কেবল--পূর্বশর্ত
সাধারণ পূর্বশর্ত বিভাগ অবশ্যই খালি থাকতে পারে। এছাড়াও, আপনি একই লক্ষ্যটির জন্য পূর্বশর্তগুলির একাধিক লাইন ঘোষণা করতে পারেন: সেগুলি যথাযথভাবে সংযোজন করা হয়। নোট করুন যে আপনি যদি একই ফাইলটিকে একটি সাধারণ এবং কেবলমাত্র আদেশের পূর্বশর্ত হিসাবে ঘোষণা করেন তবে স্বাভাবিক পূর্বশর্তটি অগ্রাধিকার নেয় (যেহেতু তারা কেবলমাত্র আদেশের পূর্বশর্তের আচরণের কঠোর সুপারিশ)।
তাই মেকফিল হয়ে যায়
.PHONY : clearscr fresh clean all
all :
compile executable
clean :
rm -f *.o $(EXEC)
fresh : | clean clearscr all
clearscr:
clear
সম্পাদনা 5 ডিসেম্বর
একাধিক মেকফিল ইনস্ট্যান্স চালানো বড় বিষয় নয় যেহেতু কার্যের ভিতরে থাকা প্রতিটি কমান্ড যে কোনও উপায়ে শেল হবে । তবে কল ফাংশনটি ব্যবহার করে আপনার পুনরায় ব্যবহারযোগ্য পদ্ধতি থাকতে পারে ।
log_success = (echo "\x1B[32m>> $1\x1B[39m")
log_error = (>&2 echo "\x1B[31m>> $1\x1B[39m" && exit 1)
install:
@[ "$(AWS_PROFILE)" ] || $(call log_error, "AWS_PROFILE not set!")
command1 # this line will be a subshell
command2 # this line will be another subshell
@command3 # Use `@` to hide the command line
$(call log_error, "It works, yey!")
uninstall:
@[ "$(AWS_PROFILE)" ] || $(call log_error, "AWS_PROFILE not set!")
....
$(call log_error, "Nuked!")
.PHONY :
কিছু কীওয়ার্ড হিসাবে বিবেচনা করা হয় যা সর্বদা কার্যকর হয়, যখন অ-ফোনি লক্ষ্যগুলি ফাইল হতে পারে।