উত্তর:
মেক (বা বরং একটি মেকফাইল) একটি বিল্ডসিস্টেম - এটি আপনার কোডটি তৈরি করতে সংকলক এবং অন্যান্য বিল্ড সরঞ্জামগুলি চালিত করে।
সিএমকে হ'ল বিল্ডসিস্টেমগুলির জেনারেটর। এটি মেকফাইলগুলি তৈরি করতে পারে, এটি নিনজা বিল্ড ফাইল তৈরি করতে পারে, এটি কেডিএলফো বা এক্সকোড প্রকল্প তৈরি করতে পারে, এটি ভিজ্যুয়াল স্টুডিও সমাধানগুলি তৈরি করতে পারে। একই প্রারম্ভিক বিন্দু থেকে, একই সিএমকেলিস্ট.টেক্সট ফাইল। সুতরাং আপনার যদি প্ল্যাটফর্ম-স্বতন্ত্র প্রকল্প থাকে তবে সিএমকে এটিকে বিল্ডসিস্টেম-স্বতন্ত্র করারও একটি উপায় way
আপনার যদি উইন্ডোজ বিকাশকারীরা ভিজ্যুয়াল স্টুডিও এবং ইউনিক্স বিকাশকারীদের সাথে অভ্যস্ত যারা জিএনইউ মেকের দ্বারা কসম খায়, সিএমকে যাওয়ার উপায় (গুলি) এর মধ্যে অন্যতম।
আমি যদি আপনার প্রকল্পটি মাল্টি-প্ল্যাটফর্ম বা বহুল ব্যবহারযোগ্য হিসাবে চালিত করতে চান তবে আমি সর্বদা সিএমকে (বা অন্য বিল্ডসিস্টেম জেনারেটর ব্যবহার করার পরামর্শ দিচ্ছি, তবে সিএমকেক আমার ব্যক্তিগত পছন্দ)। সিএমকে নিজেও কিছু দুর্দান্ত বৈশিষ্ট্য সরবরাহ করে যেমন নির্ভরতা সনাক্তকরণ, গ্রন্থাগার ইন্টারফেস ম্যানেজমেন্ট, বা সিটিস্ট, সিডিএস এবং সিপ্যাকের সাথে সংহতকরণ।
বিল্ডসিস্টেম জেনারেটর ব্যবহার করা আপনার প্রকল্পকে আরও ভবিষ্যত-প্রমাণ করে তোলে। এমনকি আপনি এখন কেবল জিএনইউ-মেক-আপ করলেও, পরে যদি আপনি অন্য প্ল্যাটফর্মগুলিতে প্রসারিত করার সিদ্ধান্ত নেন (তা উইন্ডোজ বা এম্বেড থাকা কিছু হোক), বা কেবল কোনও আইডিই ব্যবহার করতে চান?
find_package()) বা টেস্টিং / প্যাকেজিং সমর্থন মতো সিএমকের অন্যান্য কার্যকারিতাও রয়েছে ।
সিএমকে "বিল্ড জেনারেটর" হওয়ার বিবৃতিটি একটি সাধারণ ভুল ধারণা ception
এটি প্রযুক্তিগতভাবে ভুল নয়; এটি কেবল এটি কীভাবে কাজ করে তা বর্ণনা করে তবে এটি কী করে তা নয়।
প্রশ্নের প্রসঙ্গে তারা একই কাজ করে: একগুচ্ছ সি / সি ++ ফাইল নিয়ে সেগুলি বাইনারিতে পরিণত করে।
তাহলে, আসল পার্থক্য কী?
সিএমকেক অনেক বেশি উচ্চ-স্তরের। এটি সি ++ সংকলন করার জন্য তৈরি করা হয়েছে, যার জন্য আপনি বিল্ড কোড কম লিখে থাকেন তবে সাধারণ উদ্দেশ্যে তৈরির জন্যও এটি ব্যবহার করা যেতে পারে। makeকিছু অন্তর্নির্মিত সি / সি ++ নিয়মগুলি রয়েছে তবে সেগুলি বেশিরভাগই অকেজো।
CMakeএকটি দুটি পদক্ষেপে বিল্ড করে এতে একটি নিম্ন স্তরের বিল্ড স্ক্রিপ্ট উত্পন্ন ninjaবা makeবা অন্যান্য অনেক জেনারেটর, এবং তারপরে আপনি এটি চালানোর জন্য। সমস্ত শেল স্ক্রিপ্ট টুকরোগুলি যা সাধারণত পাইল Makefileথাকে কেবল প্রজন্মের পর্যায়ে কার্যকর করা হয়। সুতরাং, CMakeবিল্ডিং দ্রুততরতার অর্ডার হতে পারে।
ব্যাকরণটি মেকিংয়ের চেয়েCMake বাহ্যিক সরঞ্জামগুলির পক্ষে সমর্থন করা অনেক সহজ ।
একবার makeএকটি শৈল্পিক তৈরি করে, এটি কীভাবে তৈরি হয়েছিল তা ভুলে যায়। এটি কোন উত্স থেকে নির্মিত হয়েছিল, কোন সংকলক পতাকাগুলি? CMakeএটি ট্র্যাক করে, makeএটি আপনার উপর ছেড়ে দেয়। পূর্ববর্তী সংস্করণ থেকে যদি কোনও গ্রন্থাগার উত্স অপসারণ করা হয় Makefile, makeতবে এটি পুনর্নির্মাণ করবে না।
আধুনিক CMake(সংস্করণ 3. কিছু দিয়ে শুরু করে) "লক্ষ্যগুলি" এর মধ্যে নির্ভরতার শর্তে কাজ করে। একটি লক্ষ্য এখনও একটি একক আউটপুট ফাইল (দুঃখের সাথে), তবে ট্রানসিটিভ ("সার্বজনীন" / "ইন্টারফেস" সিএমকেট পদে) নির্ভরতা থাকতে পারে। এই ট্রানজিটিভ নির্ভরতা নির্ভর প্যাকেজগুলি থেকে প্রকাশ বা গোপন করা যেতে পারে। CMakeআপনার জন্য ডিরেক্টরি পরিচালনা করবে। এর সাথে make, আপনি একটি ফাইল-ইন-ফাইল এবং পরিচালনা-ডিরেক্টরি-দ্বারা-হাত স্তরে আটকে আছেন।
makeশেষ দুটি ফাঁকগুলি coverাকতে ফ্ল্যাগ ফাইলগুলি ব্যবহার করে আপনি কিছু কোড আপ করতে পারেন তবে আপনি নিজেরাই। makeএতে একটি টিউরিং সম্পূর্ণ ভাষা থাকে (এমনকি দুটি, কখনও কখনও তিনটি গিলি গণনা করা হয় ) এবং সেগুলি সব ভয়াবহ।
সৎ হবে, এটা কি CMakeএবং make: তাদের ভাষায় চমত্কার ভয়ঙ্কর রয়েছে - কমন আছে
দিয়ে শুরু.
কিন্তু CMakeআপনি কোড অনেক কম লাইন লিখুন।