মনে হচ্ছে আপনি কোনও উত্স তৈরির বাইরে চান । কয়েকটি উত্স রয়েছে যা আপনি উত্স তৈরির বাইরে তৈরি করতে পারেন।
আপনি যা করছিলেন তা করুন, চালান
cd /path/to/my/build/folder
cmake /path/to/my/source/folder
যা cmake একটি জেনারেট করতে হবে build ট্রি মধ্যে /path/to/my/build/folder
জন্য উৎস গাছ মধ্যে /path/to/my/source/folder
।
একবার এটি তৈরি হয়ে গেলে, ক্যামাক স্মরণ করে যে উত্স ফোল্ডারটি কোথায় - তাই আপনি এটি দিয়ে বিল্ড ট্রিতে পুনরায় চালাতে পারেন
cmake /path/to/my/build/folder
অথবা এমনকি
cmake .
যদি আপনার বর্তমান ডিরেক্টরিটি ইতিমধ্যে বিল্ড ফোল্ডার হয়।
সিএমকে ৩.১৩ বা তার পরে, উত্স সেট করতে এবং ফোল্ডারগুলি তৈরি করতে এই বিকল্পগুলি ব্যবহার করুন
cmake -B/path/to/my/build/folder -S/path/to/my/source/folder
পুরানো সিএমকে জন্য, উত্স সেট করতে এবং ফোল্ডারগুলি তৈরি করতে কিছু অনাবন্ধিত বিকল্পগুলি ব্যবহার করুন :
cmake -B/path/to/my/build/folder -H/path/to/my/source/folder
যা (1) হিসাবে ঠিক একই জিনিসটি করবে তবে বর্তমান কার্যনির্বাহী ডিরেক্টরিতে নির্ভরতা ছাড়াই।
CMake তার আউটপুট সব রাখে build ট্রি ডিফল্টরূপে, তাই যদি না আপনি অকুণ্ঠচিত্তে ব্যবহার করছেন ${CMAKE_SOURCE_DIR}
বা ${CMAKE_CURRENT_SOURCE_DIR}
আপনার cmake ফাইলের মধ্যে, এটি আপনার স্পর্শ করতে না পারে উৎস গাছ ।
সবচেয়ে বড় যেটি ভুল হতে পারে তা হ'ল যদি আপনি পূর্বে আপনার উত্স গাছটিতে একটি বিল্ড ট্রি তৈরি করেছেন (যেমন আপনার উত্স বিল্ড রয়েছে)। একবার আপনি এই (1) এর দ্বিতীয় অংশটি উপরে কিক্স করে নিলে, এবং সিমেক উত্সটিতে কোনও পরিবর্তন করে না বা অবস্থানগুলি তৈরি করে না। সুতরাং, আপনি ইন-সোর্স বিল্ড সহ উত্স ডিরেক্টরিতে আউট-অফ-সোর্স বিল্ড তৈরি করতে পারবেন না । CMakeCache.txt
উত্স ডিরেক্টরি থেকে (সর্বনিম্ন) অপসারণ করে আপনি এটি মোটামুটি সহজেই ঠিক করতে পারেন । আরও কয়েকটি ফাইল রয়েছে (বেশিরভাগ CMakeFiles
ডিরেক্টরিটিতে) যা সিএমকে জেনারেট করে যে আপনারও অপসারণ করা উচিত, তবে এগুলি উত্স গাছটিকে একটি বিল্ড ট্রি হিসাবে বিবেচনা করার কারণ হবে না।
যেহেতু আউট-অফ-সোর্স বিল্ডগুলি ইন-সোর্স বিল্ডগুলির চেয়ে প্রায়শই কাঙ্ক্ষিত হয় তাই আপনি উত্স বিল্ডগুলির প্রয়োজনের জন্য নিজের চক্রটি পরিবর্তন করতে চাইতে পারেন:
# Ensures that we do an out of source build
MACRO(MACRO_ENSURE_OUT_OF_SOURCE_BUILD MSG)
STRING(COMPARE EQUAL "${CMAKE_SOURCE_DIR}"
"${CMAKE_BINARY_DIR}" insource)
GET_FILENAME_COMPONENT(PARENTDIR ${CMAKE_SOURCE_DIR} PATH)
STRING(COMPARE EQUAL "${CMAKE_SOURCE_DIR}"
"${PARENTDIR}" insourcesubdir)
IF(insource OR insourcesubdir)
MESSAGE(FATAL_ERROR "${MSG}")
ENDIF(insource OR insourcesubdir)
ENDMACRO(MACRO_ENSURE_OUT_OF_SOURCE_BUILD)
MACRO_ENSURE_OUT_OF_SOURCE_BUILD(
"${CMAKE_PROJECT_NAME} requires an out of source build."
)
উপরের ম্যাক্রোটি ব্যবহৃত একটি সাধারণ ব্যবহৃত মডিউল থেকে আসে MacroOutOfSourceBuild
। MacroOutOfSourceBuild.cmake
গুগলে প্রচুর উত্স রয়েছে তবে আমি আসলটি খুঁজে পাচ্ছি না এবং এখানে পুরোপুরি অন্তর্ভুক্ত করার পক্ষে এটি যথেষ্ট সংক্ষিপ্ত।
দুর্ভাগ্যক্রমে cmake সাধারণত ম্যাক্রোটি আহ্বানের সময় কয়েকটি ফাইল লিখেছিল, যদিও এটি আপনাকে প্রকৃতপক্ষে বিল্ড সম্পাদন করা থেকে বিরত করবে যদিও আপনার এখনও মুছে ফেলতে হবে CMakeCache.txt
এবং প্রয়োজন CMakeFiles
।
বাইনারি, ভাগ করা এবং স্ট্যাটিক লাইব্রেরিগুলিতে যে রাস্তাগুলি লিখিত রয়েছে সেটগুলি স্থাপন করা আপনার পক্ষে দরকারী হতে পারে - এই ক্ষেত্রে দেখুন আমি কীভাবে একটি 'বিন' দিরের মধ্যে cmake আউটপুট তৈরি করব? (অস্বীকৃতি, আমি এই প্রশ্নের উপরে শীর্ষে উত্তর দেওয়া আছে ... কিন্তু আমি এটি সম্পর্কে জানি যে কিভাবে)।
CMAKE_BINARY_DIR
CMAKE_CACHEFILE_DIR
set()
cd Compile; rm -rf *; cmake ../src