CMAKE_CURRENT_SOURCE_DIR এবং CMAKE_CURRENT_LIST_DIR এর মধ্যে পার্থক্য


108

উইকি থেকে:

CMAKE_CURRENT_SOURCE_DIR এটিই সেই ডিরেক্টরি যেখানে বর্তমানে প্রক্রিয়াজাত সিএমকেলিস্ট.টেক্সট অবস্থিত

CMAKE_CURRENT_LIST_DIR ( ২.৮.৩ থেকে) বর্তমানে প্রক্রিয়াধীন তালিকা-ফাইলের ডিরেক্টরি এটি।

দস্তাবেজ থেকে:

CMAKE_CURRENT_SOURCE_DIR: উত্স ডিরেক্টরিতে যাওয়ার পথটি বর্তমানে প্রক্রিয়াধীন। এটি সোর্স ডিরেক্টরিতে সম্পূর্ণ পথ যা বর্তমানে cmake দ্বারা প্রক্রিয়া করা হচ্ছে।

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

কোন পরিস্থিতিতে এই ভেরিয়েবলগুলির বিভিন্ন মান থাকবে?


10
এবং তারা কীভাবে সহজ এবং সুন্দর থেকে পৃথক ./?
kyb

উত্তর:


142

ভেরিয়েবলগুলি CMAKE_CURRENT_SOURCE_DIRএবং অন্তর্ভুক্ত কমান্ডের CMAKE_CURRENT_LIST_DIRসাথে অন্য একটি ফাইল দ্বারা অন্তর্ভুক্ত সিএমকেক তালিকা ফাইলের জন্য বিভিন্ন ডিরেক্টরিকে নির্দেশ করতে পারে । উদাহরণস্বরূপ, যদি কোনও ডিরেক্টরিতে উপস্থিত থাকে এবং নিম্নলিখিত নির্দেশাবলী থাকেCMakeLists.txtproject

include(src/CMakeLists.txt)

তারপরে src/CMakeLists.txtপ্রক্রিয়াজাত হওয়ার সময় CMAKE_CURRENT_LIST_DIRউল্লেখ করা হবে project/srcযেখানে CMAKE_CURRENT_SOURCE_DIRএখনও বাইরের ডিরেক্টরিকে নির্দেশ করা হচ্ছে project

CMAKE_CURRENT_LIST_DIRযখন আপনার CMakeLists.txtবর্তমানে প্রক্রিয়াধীন ফাইলের পাশে অবস্থিত টেম্পলেট ফাইল বা ব্যাচ স্ক্রিপ্টগুলির মতো রিসোর্স ফাইলগুলি সনাক্ত করতে হবে তখন কার্যকর হবে ।


দ্রষ্টব্য: add_subdirectory()পরিবর্তে কমান্ডটি ব্যবহার করার সময় include(), আচরণটি আলাদা এবং যখন src/CMakeLists.txtপ্রক্রিয়া করা হয়, উভয় ভেরিয়েবলগুলি নির্দেশ করবে project/src


42
+1 আমি কেবল CMAKE_CURRENT_LIST_DIRপ্রতিটি ফাইলের সাথে আপনার সেই পরিবর্তনগুলি যুক্ত করব include(); এটি কল করতে হবে না CMakeLists.txt
অ্যাঞ্জিউ আর

4
এখানে ভাল আলোচনাকার্যকরভাবে কীভাবে ব্যবহার করতে হয় CMAKE_CURRENT_LIST_DIRএবং include(...)আপনার প্রকল্পগুলিতে ।
jmcarter9t

4
সহজেই বিভ্রান্ত হয় কারণ ডক্সের বোঝার চেয়ে CMAKE_CURRENT_SOURCE_DIRআরও বেশি মিল CMAKE_SOURCE_DIR
মালাচি

আর সাথে add_subdirectory()? উভয় ভেরিয়েবলগুলি ফোল্ডারে নির্দেশ করবে?
আইনপোকলুম

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