CMAKE_CURRENT_SOURCE_DIR और CMAKE_CURRENT_LIST_DIR के बीच अंतर


105

विकी से:

CMAKE_CURRENT_SOURCE_DIR यह वह निर्देशिका है जहां वर्तमान में संसाधित CMakeLists.txt स्थित है

CMAKE_CURRENT_LIST_DIR (2.8.3 के बाद से) यह वर्तमान में संसाधित की जा रही सूची सूची की निर्देशिका है।

डॉक्स से:

CMAKE_CURRENT_SOURCE_DIR: वर्तमान में संसाधित की जा रही स्रोत निर्देशिका का पथ। स्रोत निर्देशिका के लिए यह पूर्ण पथ जो वर्तमान में cmake द्वारा संसाधित किया जा रहा है।

CMAKE_CURRENT_LIST_DIR: वर्तमान में संसाधित की जा रही सूची की पूर्ण निर्देशिका। जैसा कि CMake आपके प्रोजेक्ट में listfiles को संसाधित करता है, यह चर हमेशा उस निर्देशिका में सेट किया जाएगा जहां listfile को वर्तमान में संसाधित किया जा रहा है (CMAKE_CURRENT_LIST_FILE) स्थित है। मान में डायनेमिक स्कोप है। जब CMake एक सोर्स फ़ाइल में कमांड प्रॉसेस करना शुरू करता है तो यह इस वेरिएबल को उस डायरेक्टरी में सेट करता है जहाँ यह फाइल स्थित है। जब CMake फाइल से प्रोसेसिंग कमांड को पूरा करता है तो यह पिछले मूल्य को पुनर्स्थापित करता है। इसलिए किसी मैक्रो या फंक्शन के अंदर वेरिएबल का वैल्यू कॉल स्टैक पर सबसे नीचे एंट्री करने वाली फाइल की डायरेक्टरी है, न कि मैक्रो या फंक्शन डेफिनिशन वाली फाइल की डायरेक्टरी।

किन परिस्थितियों में ये चर अलग-अलग मूल्य धारण करेंगे?


10
और यह भी कि वे सरल और अच्छे से अलग कैसे हैं ./?
कीब

जवाबों:


139

चर CMAKE_CURRENT_SOURCE_DIRऔर CMAKE_CURRENT_LIST_DIRसीएमके सूची फ़ाइल के लिए अलग-अलग निर्देशिकाओं को संदर्भित कर सकते हैं, जिसमें शामिल कमांड के साथ एक अन्य फ़ाइल शामिल है । जैसे, यदि कोई CMakeLists.txtनिर्देशिका में मौजूद है projectऔर निम्नलिखित निर्देश शामिल हैं

include(src/CMakeLists.txt)

तब जबकि src/CMakeLists.txtसंसाधित किया जा रहा है, जबकि अभी भी बाहरी निर्देशिका CMAKE_CURRENT_LIST_DIRको इंगित करेगा ।project/srcCMAKE_CURRENT_SOURCE_DIRproject

CMAKE_CURRENT_LIST_DIRउस समय काम आता है जब आपको रिसोर्स फाइल्स या बैच स्क्रिप्ट्स का पता लगाना होता है जो CMakeLists.txtवर्तमान में प्रोसेस की जा रही फाइल के बगल में स्थित होती हैं।


42
+1। मैं बस CMAKE_CURRENT_LIST_DIRआपको हर फ़ाइल के साथ परिवर्तन जोड़ दूंगा include(); इसे बुलाया नहीं जाना चाहिए CMakeLists.txt
Angew को अब SO

2
प्रभावी ढंग से CMAKE_CURRENT_LIST_DIRऔर include(...)अपनी परियोजनाओं में उपयोग करने के तरीके पर यहां अच्छी चर्चा हुई
jmcarter9t

1
आसानी से भ्रमित क्योंकि डॉक्स की तुलना में CMAKE_CURRENT_SOURCE_DIRअधिक समान CMAKE_SOURCE_DIRहै।
मलाकी

और के साथ add_subdirectory()? क्या दोनों चर फोल्डर को इंगित करेंगे?
einpoklum
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.