আমি প্রস্তাব করব যে সাধারণ ডিবাগ তৈরি না করা এবং কাজগুলি প্রকাশের জন্য যদি প্রকল্পটি সত্যিই এমন কিছু হয় যা সংকলিত হয় এবং ফলস্বরূপ ফাইল হয়। আপনার ফাইল-টাস্কগুলির সাথে যাওয়া উচিত যা আপনার উদাহরণ হিসাবে যথেষ্ট কার্যকর, যেমন আপনি উল্লেখ করেছেন যে আপনার আউটপুট বিভিন্ন ডিরেক্টরিতে চলে। বলুন আপনার প্রকল্পটি / ডিবাগ / টেস্টআউট এবং আউট / রিলিজ / টেস্টআউট আউট / ডিবিগ / টেস্ট.আউট করার জন্য একটি টেস্ট.ক্র.
WAYS = ['debug', 'release']
FLAGS = {}
FLAGS['debug'] = '-g'
FLAGS['release'] = '-O'
def out_dir(way)
File.join('out', way)
end
def out_file(way)
File.join(out_dir(way), 'test.out')
end
WAYS.each do |way|
desc "create output directory for #{way}"
directory out_dir(way)
desc "build in the #{way}-way"
file out_file(way) => [out_dir(way), 'test.c'] do |t|
sh "gcc #{FLAGS[way]} -c test.c -o #{t.name}"
end
end
desc 'build all ways'
task :all => WAYS.map{|way|out_file(way)}
task :default => [:all]
এই সেটআপটি ব্যবহার করা যেতে পারে:
rake all # (builds debug and release)
rake debug # (builds only debug)
rake release # (builds only release)
এটি যেমন চাওয়া হয়েছে তেমন আরও কিছু করে তবে আমার পয়েন্টগুলি দেখায়:
- প্রয়োজনীয় হিসাবে আউটপুট ডিরেক্টরি তৈরি করা হয়।
- ফাইলগুলি কেবল প্রয়োজন হলে পুনরায় সংযুক্ত করা হয় (এই উদাহরণটি কেবলমাত্র টেস্ট.সি. ফাইলগুলির সাদামাটা জন্য সঠিক)।
- আপনি যদি রিলিজ বিল্ড বা ডিবাগ বিল্ডটি ট্রিগার করতে চান তবে আপনার সমস্ত কাজ সহজেই হাতে রয়েছে।
- এই উদাহরণে ডিবাগ এবং রিলিজ-বিল্ডের মধ্যে ছোট পার্থক্য সংজ্ঞায়নের একটি উপায় অন্তর্ভুক্ত রয়েছে।
- গ্লোবাল ভেরিয়েবলের সাথে প্যারামিটারাইজড এমন বিল্ড-টাস্কটিকে পুনরায় সক্ষম করার দরকার নেই, কারণ এখন বিভিন্ন বিল্ডগুলির আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা আলাদা টাস্ক থাকে বিল্ড-টাস্কের কোডরিয়জটি বিল্ড-টাস্কগুলি সংজ্ঞায়িত করতে কোডটি পুনরায় ব্যবহার করে সম্পন্ন করা হয়। দেখুন লুপ কীভাবে একই কাজটি দু'বার সম্পাদন করে না, বরং এর পরিবর্তে কার্য তৈরি করেছে, যা পরে চালিত করা যেতে পারে (হয় সমস্ত-কার্য দ্বারা বা রেক কমান্ডলাইনে তাদের মধ্যে একটি চয়ন করা যেতে পারে)।