সিএমকে কীভাবে কাজ করবে?


157

আমি এটা শুধু নিজের জন্য জিজ্ঞাসা করছি না। আমি আশা করি এই প্রশ্নটি এমন অনেক নবজাতকের জন্য একটি রেফারেন্স হয়ে উঠবে যারা আমার পছন্দ করে, এ জাতীয় একটি ছোট CMakeLists.txtফাইলের জন্য যখন পর্দার আড়ালে ঠিক কী ঘটেছিল তা পুরোপুরি বিচলিত করে দেখেছিল

cmake_minimum_required (VERSION 2.6)
project(Tutorial)
add_executable(Tutorial tutorial.cpp)

এবং যেমন একটি ছোট tutorial.cpp

int main() { return 0; } 

অনেকগুলি উত্পন্ন ফাইল রয়েছে

CMakeCache.txt  cmake_install.cmake  Makefile
CMakeLists.txt  tutorial.cpp

এবং CMakeFilesঅনেকগুলি ফাইল এবং ফোল্ডার সহ একটি ফোল্ডার

CMakeCCompiler.cmake               CMakeOutput.log    Makefile.cmake
cmake.check_cache                  CMakeSystem.cmake  progress.marks
CMakeCXXCompiler.cmake             CMakeTmp           TargetDirectories.txt
CMakeDetermineCompilerABI_C.bin    CompilerIdC        Tutorial.dir
CMakeDetermineCompilerABI_CXX.bin  CompilerIdCXX
CMakeDirectoryInformation.cmake    Makefile2

পর্দার আড়ালে কী চলছে তা বুঝতে না পেরে (যেমন: ফাইলগুলি কেন তৈরি হতে পারে এবং তাদের উদ্দেশ্য কী ছিল), সিএমকে শেখার পক্ষে সবচেয়ে বড় বাধা ছিল।

যদি কেউ জানে, আপনি দয়া করে উত্তরসূরির জন্য এটি ব্যাখ্যা করতে পারেন? এই ফাইলগুলির উদ্দেশ্য কী, এবং যখন আমি টাইপ করি cmake ., তখন প্রকল্পটি তৈরির আগে cmake কনফিগারেশন এবং জেনারেট করা ঠিক কী হয়?


1
আমি আউট-অফ-সোর্স বিল্ডগুলি সম্পর্কে সচেতন। যদি কেউ উত্স বিল্ডের বাইরে কাজ না করে এবং এখনও উত্পন্ন ফাইলগুলি পরিষ্কার করার উপায় খুঁজছে তবে এই কৌশলটি ভালভাবে কাজ করে: stackoverflow.com/a/12055610/453673
নভে

3
এখানে দুর্দান্ত বর্ণনা রয়েছে: aosabook.org/en/cmake.html এবং সম্ভবত প্রশ্নের গভীরতর উত্তর (যা সংক্ষেপে এখানে সংক্ষিপ্ত করা যায় না)।
প্যারাসরিশ

@ SebTu ব্রোকন লিঙ্ক Cmake.html পৃষ্ঠাটি বিদ্যমান নেই।
ন্যাভ

3
@ ইয়্যাভ, মার্কআপ সিনট্যাক্সটি বিশৃঙ্খলা করল, দুঃখিত। সুতরাং, এখানে সংশোধন করা সংস্করণ: নতুন লোকদের চেমেক করার জন্য আমি প্রকৃতপক্ষে cmake এর আর্কিটেকচার পড়ার প্রস্তাব দিই । এটি বিবরণে নিজেকে না হারিয়ে চাঞ্চল্যকরভাবে কাজ করে এমন অনুভূতি পেতে কেবল পর্যাপ্ত তথ্য সরবরাহ করে।
সেবনাগ

উত্তর:


92

গোপনীয়তা হ'ল উত্পন্ন ফাইলগুলি কী করে তা আপনাকে বুঝতে হবে না।

সিএমকে বিল্ড সিস্টেমের মধ্যে অনেক জটিলতার পরিচয় দেয়, যার মধ্যে বেশিরভাগ কেবল যদি আপনি জটিল সফ্টওয়্যার প্রকল্প তৈরির জন্য এটি ব্যবহার করেন তবে পরিশোধ করে।

সুসংবাদটি হ'ল সিএমকে এই অগোছালোতাকে আপনার কাছ থেকে দূরে রাখার জন্য একটি ভাল কাজ করেছেন: উত্স-তৈরির বিল্ডগুলি ব্যবহার করুন এবং আপনাকে উত্পন্ন ফাইলগুলিও দেখতে হবে না। যদি আপনি এখনও পর্যন্ত এটি না করেন (যা আমি অনুমান করি যে বিষয়টি কেস, যেহেতু আপনি লিখেছেন cmake .), দয়া করে এগিয়ে যাওয়ার আগে এগুলি পরীক্ষা করে দেখুন । বিল্ড এবং উত্স ডিরেক্টরি মিশ্রণ সিএমকে-এর সাথে সত্যিই বেদনাদায়ক এবং সিস্টেমটি কীভাবে ব্যবহার করা হবে বলে মনে করা হচ্ছে তা নয়।

সংক্ষেপে: পরিবর্তে

cd <source_dir>
cmake .

সর্বদা ব্যবহার

cd <build_dir_different_from_source_dir>
cmake <source_dir>

পরিবর্তে. buildবিল্ড ডিরেক্টরি হিসাবে আমি সাধারণত আমার উত্স ডিরেক্টরিতে একটি খালি সাবফোল্ডার ব্যবহার করি।

আপনার ব্যথা লাঘব করার জন্য, আমাকে প্রাসঙ্গিক ফাইলগুলি যা সিএমকে উত্পন্ন করে তার একটি তাত্ক্ষণিক সংক্ষিপ্ত বিবরণ দিই:

  • প্রকল্প ফাইল / মেকফাইলস - আপনি আসলে কী আগ্রহী: নির্বাচিত জেনারেটরের অধীনে আপনার প্রকল্পটি তৈরি করতে প্রয়োজনীয় ফাইলগুলি। এটি ইউনিক্স মেকফিল থেকে ভিজ্যুয়াল স্টুডিও সমাধানের যে কোনও কিছু হতে পারে।
  • CMakeCache.txt - এটি একটি ধ্রুবক কী / মান স্ট্রিং স্টোরেজ যা রানের মধ্যে মান ক্যাশে করতে ব্যবহৃত হয়। এখানে সঞ্চিত মানগুলি গ্রন্থাগার নির্ভরতা বা anচ্ছিক উপাদানটি আদৌ তৈরি করতে হবে কিনা তা পথ হতে পারে। চলকগুলির তালিকা বেশিরভাগ ক্ষেত্রে সাদৃশ্যপূর্ণ যা আপনি চলমান ccmakeবা চলাকালীন দেখেন cmake-gui। এটি সময়ে সময়ে দেখার জন্য দরকারী হতে পারে তবে আমি যদি সম্ভব হয় তবে মানগুলির কোনও পরিবর্তন করার জন্য পূর্বোক্ত সরঞ্জামগুলি ব্যবহার করার পরামর্শ দেব।
  • উত্পাদিত ফাইল - ম্যাক্রো রফতানি করতে স্বয়ংক্রিয় উত্পন্ন উত্স ফাইল থেকে শুরু করে এমন কিছু হতে পারে যা আপনাকে অন্য সিএমকে প্রকল্পগুলির সাথে আপনার বিল্ট প্রজেক্টকে পুনরায় সংহত করতে সহায়তা করে। এগুলির বেশিরভাগ কেবলমাত্র চাহিদার ভিত্তিতে উত্পন্ন এবং আপনার প্রশ্ন থেকে একটি সাধারণ প্রকল্পে প্রদর্শিত হবে না।
  • বিল্ড সিস্টেমটি সুখী রাখতে অন্য যে কোনও কিছুতে বেশ আওয়াজ রয়েছে। বিশেষত, আমার কখনই CMakeFilesসাব - ডাইরেক্টরির ভিতরে চলছে এমন কিছু সম্পর্কে যত্ন নেওয়ার প্রয়োজন ছিল না ।

সিএমকে আপনার জন্য উত্পন্ন করে যে কোনও ফাইলকে সাধারণভাবে আপনার বিভ্রান্ত করা উচিত নয়। সমস্ত সমস্যা CMakeLists.txtএক থেকে অন্য উপায়ে সমাধান করা যেতে পারে । যতক্ষণ ফল প্রত্যাশা অনুযায়ী আপনার প্রকল্পটি তৈরি করবে ততক্ষণ আপনি সম্ভবত ভাল আছেন। বেহাল বিবরণ সম্পর্কে খুব বেশি চিন্তা করবেন না - কারণ এটিই সিএমকে আপনাকে প্রথমে ছাড়িয়ে দেওয়ার চেষ্টা করছিল।


ধন্যবাদ। উত্স তৈরির বাইরে সম্পর্কে সচেতন ছিল, তবে আপনি যেমন দেখতে পাচ্ছেন, এই প্রশ্নটি জিজ্ঞাসার উদ্দেশ্যটি ছিল আরও বোঝা। আপনার উত্তরের সিএমকেচে। টেক্সট অংশটি সত্যই সহায়তা করেছে। এটি এই ধরণের ব্যাখ্যা যা আমি সন্ধান করছিলাম। এছাড়াও, আমার প্রশ্নের শেষ বাক্য: " প্রকল্পটি তৈরির আগে সিএমকে কনফিগার এবং জেনারেট করা ঠিক কী "
নভ

1
CMakeFilesডিরেক্টরি রয়েছে CMakeError.logএবং CMakeOutput.logসিএমকে বিল্ডগুলির সমস্যা সমাধানের জন্য গুরুত্বপূর্ণ।
সার্জ রোগাচ

1
দুটি জিনিস যে কখনও কখনও আপনি চেক করতে হবে CMakeFiles/target_name.dirডিরেক্টরি হয় flags.makeএবং link.txtফাইল। আমাকে জটিল প্রকল্পে এটি পরীক্ষা করে দেখতে হয়েছিল, যা উত্তোলন করে ফ্ল্যাশ / লিঙ্কযুক্ত স্টাফ আপস্ট্রিম প্রকল্পগুলি থেকে। উদাহরণস্বরূপ: আমার কিছু ত্রুটি হয়েছিল কারণ টিপিএল এ টিপিএল বি এর উপর নির্ভরতা ছিল এবং এছাড়াও আমার প্রকল্পের বিয়ের উপর নির্ভরতা ছিল, যা আমি স্থানীয়ভাবে ইনস্টল করেছি; তবে এ আমার সিস্টেম থেকে বি এর একটি সংস্করণ ব্যবহার করেছে (আমার স্থানীয় ইনস্টল না করে) যার বিভিন্ন সক্ষম বিকল্প রয়েছে এবং এটি প্রথম এসেছিল, যা আমার প্রকল্পে ত্রুটি ঘটায়। কেবল লিঙ্ক.টিএইচএসটি দেখে আমি জানতে পেরেছিলাম যে এটি ঘটছে।
বার্টগোল

13

যেমন এর ওয়েবসাইটে বলা হয়েছে:

কমেক একটি সংকলক-স্বাধীন পদ্ধতি ব্যবহার করে সফ্টওয়্যার তৈরির প্রক্রিয়া পরিচালনার জন্য ক্রস প্ল্যাটফর্ম, ওপেন সোর্স বিল্ড সিস্টেম

বেশিরভাগ ক্ষেত্রে এটি প্রকল্প তৈরি / ফাইল তৈরি করতে ব্যবহৃত হয় - আপনার উদাহরণে এটি তৈরি করেছে Makefileযা আপনার সফ্টওয়্যার তৈরি করতে ব্যবহৃত হয় (বেশিরভাগ লিনাক্স / ইউনিক্স প্ল্যাটফর্মে)।

Cmake ক্রস প্ল্যাটফর্ম বিল্ড ফাইল সরবরাহ করতে দেয় যা প্ল্যাটফর্ম নির্দিষ্ট প্রকল্প তৈরি করে / নির্দিষ্ট সংকলন / প্ল্যাটফর্মের জন্য ফাইল তৈরি করতে পারে।

উদাহরণস্বরূপ আপনি উইন্ডোজে আপনার সফ্টওয়্যারটি ভিজ্যুয়াল স্টুডিওতে সংকলন করার চেষ্টা করতে পারেন তবে আপনার CMakeLists.txtফাইলটিতে যথাযথ বাক্য গঠন সহ আপনি চালু করতে পারেন

cmake .

উইন্ডোজ প্ল্যাটফর্মে আপনার প্রকল্পের ডিরেক্টরিতে, cmake সমস্ত প্রয়োজনীয় প্রকল্প / সমাধান ফাইল ( .slnইত্যাদি) উত্পন্ন করবে ।

আপনি যদি লিনাক্স / ইউনিক্স প্ল্যাটফর্মে আপনার সফ্টওয়্যারটি তৈরি করতে চান তবে আপনি কেবল আপনার সোর্স ডিরেক্টরিতে যেতে পারেন যেখানে আপনার CMakeLists.txtফাইল রয়েছে এবং এটি ট্রিগার করে cmake .এবং এটি সহজ makeবা এর মাধ্যমে সফ্টওয়্যার তৈরি করার জন্য প্রয়োজনীয় সমস্ত ফাইল তৈরি করবে make all

চ্যামাইক কার্যকারিতা সম্পর্কে আপনার এখানে কিছু খুব ভাল উপস্থাপনা রয়েছে http://www.elpauer.org/stuff/learning_cmake.pdf

সম্পাদনা

আপনি যদি প্ল্যাটফর্ম নির্ভর লাইব্রেরিতে / পরিবর্তনশীল সংজ্ঞা ইত্যাদি অন্তর্ভুক্ত করতে চান তবে আপনি CMakeLists.txtফাইলটিতে এই বাক্য গঠনটি ব্যবহার করতে পারেন

IF(WIN32)
   ...do something...
 ELSE(WIN32)
   ...do something else...
 ENDIF(WIN32)

এছাড়াও ব্যবহারের সাথে প্রচুর কমান্ড রয়েছে যার সাহায্যে আপনি বিল্ডটি ব্যর্থ হওয়া থেকে রোধ করতে সক্ষম হন এবং জায়গায় Cmake আপনাকে জানিয়ে দেবে যে উদাহরণস্বরূপ আপনার বুস্ট লাইব্রেরি নেই filesystemএবং regexআপনার সিস্টেমে ইনস্টল করা নেই। এটি করতে আপনি নিম্নলিখিত বাক্য গঠন ব্যবহার করতে পারেন:

find_package(Boost 1.45.0 COMPONENTS filesystem regex)

এটি উপযুক্ত সিস্টেম / আইডিই / সংকলকটির জন্য মেকফিলগুলি তৈরি করবে কিনা তা যাচাই করে।


1
ধন্যবাদ প্যাট্রিক সহায়ক উত্তর, তবে আপনি যে পিডিএফটির সাথে লিঙ্ক করেছেন, তা মূলত সিএমকে শেখার দ্বিতীয় পর্যায়ে ব্যাখ্যা করে যা মূলত সিএমকেকে বাস্তবায়ন করে। আমি প্রথম পর্যায়ের ব্যাখ্যা সম্পর্কে জিজ্ঞাসা করছি, যেখানে কোনও ব্যক্তিকে বুঝতে হবে যে সিএমকে পৃথিবীতে কী চলছে!
নাভ

@ নব আমি আমার উত্তরটি কিছুটা প্রসারিত করেছি। আপনি আরও তথ্যের জন্য ওয়েবে অনুসন্ধান করতে পারেন।
প্যাট্রিক

জিজ্ঞাসিত প্রশ্নের উত্তর দেওয়া থেকে এটি বেশ দূরে।
সেনহরলুস

1

ঠিক কীভাবে সিএমকে কাজ করে তা বিকাশকারীদের জন্য একটি প্রশ্ন, সুতরাং এই প্রশ্নের উত্তর এখানে দেওয়া যায় না।

তবে আপনাকে সিএমকে কখন ব্যবহার করা উচিত এবং কখন কীভাবে এটি কাজ করে তা নিয়ে আপনার চিন্তা করার দরকার আছে আমরা যথাসম্ভব দরকারী দিকনির্দেশনা দিতে পারি। আমি "ওহ এটি কেবল কাজ করে" এর উত্তরগুলির ভক্ত নই - কারণ, বিশেষত সফ্টওয়্যারগুলিতে, কিছুই কখনও "স্রেফ কাজ করে" না এবং আপনাকে কিছুটা সময় কিছুটা কৌতুকপূর্ণ বিবরণে প্রবেশ করতে হবে।

সিএমকে একটি শিল্প-শক্তি সরঞ্জাম। এটি বেশ কয়েকটি জটিল প্রক্রিয়া স্বয়ংক্রিয় করে এবং এমন অনেকগুলি ভেরিয়েবলের অ্যাকাউন্টে নেয় যা সম্পর্কে আপনি সচেতন নাও হতে পারেন, বিশেষত মোটামুটি নতুন বিকাশকারী হিসাবে সম্ভবত সমস্ত অপারেটিং সিস্টেমগুলির সীমিত জ্ঞানের সাথে কাজ করা এবং সিএমকে পরিচালনা করতে পারে এমন সরঞ্জামগুলি বিল্ডিং। এতগুলি ফাইল উত্পন্ন হওয়ার কারণ এবং কেন বিষয়গুলি এত জটিল বলে মনে হচ্ছে কারণ সেগুলি অন্যান্য সমস্ত সিস্টেমই জটিল এবং এর জন্য অবশ্যই অ্যাকাউন্ট এবং স্বয়ংক্রিয় হওয়া দরকার। তদ্ব্যতীত "ক্যাশিং" এবং সরঞ্জামের অন্যান্য সময়-সংরক্ষণের বৈশিষ্ট্যগুলি রয়েছে সিএমকেতে সমস্ত কিছু বোঝার অর্থ এই বিল্ড সরঞ্জামসমূহ এবং ওএস এর সমস্ত কিছু বোঝার অর্থ এবং এই ভেরিয়েবলগুলির সমস্ত সম্ভাব্য সংমিশ্রণগুলি বোঝা যায়, যা আপনি কল্পনা করতে পারেন অসম্ভব।

এটি লক্ষ করা গুরুত্বপূর্ণ যে আপনি যদি কোনও বৃহত ক্রস-প্ল্যাটফর্ম বিল্ড সিস্টেম পরিচালনার দায়িত্বে না থাকেন এবং আপনার কোড বেসটি কয়েক কেএলসিপি হয়, সম্ভবত ১০০ কেএলএগ অবধি, সিএমকে ব্যবহার করে ১০,০০,০০০ ডলার বনজ গাছ অপসারণের মতো কিছুটা মনে হয় আপনার 2 ফুট বাই 2 ফুট ফুলের বাগান থেকে আগাছা সরানোর জন্য মেশিন। (যাইহোক, আপনি যদি কখনও এ জাতীয় মেশিনটি না দেখে থাকেন তবে আপনার ইউটিউবে একটি সন্ধান করা উচিত, তারা আশ্চর্যজনক)

আপনার বিল্ড সিস্টেমটি যদি ছোট এবং সরল হয় তবে আপনার নিজের মেকফিলগুলি নিজের হাতে লিখে বা সেগুলি নিজে স্ক্রিপ্ট করা ভাল better যখন আপনার মেকফিলগুলি অযৌক্তিক হয়ে যায় বা আপনার অন্য একটি প্ল্যাটফর্মে আপনার সিস্টেমের একটি সংস্করণ তৈরি করতে হবে, তখন আপনি সিএমকে যেতে পারেন। এই মুহুর্তে, আপনার সমাধান করার জন্য প্রচুর সমস্যা হবে এবং আপনি এ সম্পর্কে আরও কেন্দ্রীভূত প্রশ্ন জিজ্ঞাসা করতে পারেন। এরই মধ্যে, সিএমকে সম্পর্কে লেখা হয়েছে এমন দুর্দান্ত কিছু বই দেখুন বা আরও ভাল, নিজে একটি লিখুন! 8)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.