2012-09-10 12 views
10

में परियोजना का नाम स्वचालित रूप से निर्देशिका का उपयोग करें, मैं अपने निर्माण प्रणाली को प्रबंधित करने के लिए सीएमके का उपयोग करने में काफी नया हूं, इसलिए यदि मैं बेवकूफ हूं और यह एक बुरा विचार है, तो कृपया मुझे बताएं।सीएमके

मैं अपने cmakelists.txt फ़ाइल स्थापित करने के लिए इतना है कि जब मैं

project(...) 

करते निर्देशिका का नाम स्वचालित रूप से इस परियोजना का नाम हो जाता है सक्षम होने के लिए करना चाहते हैं। मैं ऐसा इसलिए करना चाहता हूं क्योंकि मुझे एक परियोजना की पूरी निर्देशिका को दूसरे के शुरुआती बिंदु के रूप में कॉपी करने में सक्षम होना सुविधाजनक लगता है। हालांकि, हालांकि मैं हमेशा कुछ अर्थपूर्ण निर्देशिका में निर्देशिका का नाम बदलता हूं, फिर भी मैं cmakelists.txt फ़ाइल की project(name) लाइन को बदलना भूल जाता हूं, और फिर मैं अपने निर्माण वातावरण में एक ही नाम के साथ खुली कई परियोजनाओं के साथ समाप्त होता हूं, जो भ्रमित हो जाता है।

आदर्श रूप से, यदि निर्देशिका नाम में रिक्त स्थान हैं तो उन्हें अंडरस्कोर द्वारा प्रतिस्थापित किया जाएगा।

क्या सीएमके ऐसा कर सकता है? और क्या यह किसी कारण से बुरा विचार है जिसे मैं नहीं देख रहा हूं?

उत्तर

8

आप अपने CMakeLists.txt की शुरुआत करने के लिए निम्न जोड़कर इस लक्ष्य को हासिल कर सकते हैं:

get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME) 
string(REPLACE " " "_" ProjectId ${ProjectId}) 
project(${ProjectId}) 

मैं throwaway परियोजनाओं के लिए यह कर के साथ एक समस्या नहीं दिख रहा है, हालांकि मुझे लगता है कि उत्पादन परियोजनाओं सामान्य रूप से होता है एक पूर्वनिर्धारित नाम जिसे project कमांड में स्पष्ट रूप से सेट किया जाएगा।

जब आप उल्लेख करते हैं कि "आप एक परियोजना की पूरी निर्देशिका को दूसरे के शुरुआती बिंदु के रूप में कॉपी करते हैं", तो मुझे लगता है कि जब आप प्रतिलिपि बनाते हैं तो आप निर्माण पेड़ को शामिल नहीं करते हैं? सीएमके isn't really able to handle the build tree being moved

+0

यदि आप किसी अन्य निर्देशिका के अंदर एक निर्देशिका है overwise आपको कोई त्रुटि मिलती $ {CMAKE_CURRENT_LIST_DIR} बजाय $ की {} CMAKE_SOURCE_DIR का उपयोग करना चाहिए लगता है। लिंक को देखें: http://stackoverflow.com/questions/15662497/in-cmake-what-is-the-difference-between-cmake-current-source-dir-and-cmake-curr – Maks

+0

@ मैक्स - ए उचित बिंदु, हालांकि ['CMAKE_CURRENT_SOURCE_DIR'] (https://cmake.org/cmake/help/v3.4/variable/CMAKE_CURRENT_SOURCE_DIR.html) [' CMAKE_CURRENT_LIST_DIR'] से अधिक उपयुक्त है (https://cmake.org/ cmake/help/v3.4/variable/CMAKE_CURRENT_LIST_DIR.html) चूंकि यह वर्तमान प्रोजेक्ट के लिए संसाधित किए जाने वाले CMakeLists.txt वाली निर्देशिका को संदर्भित करता है, जबकि '... LIST_DIR'' include' कॉल के साथ बदल जाएगा। – Fraser

+1

यह मेरे लिए उपयोगी है जब मेरे पास अलग-अलग काम करने वाले पेड़ों में 2-3 अलग-अलग शाखाएं चेक की गई हैं और QtCreator में उनके बीच स्विच करना चाहते हैं - उदाहरण के लिए, स्रोत/निष्पादन की तुलना/विपरीतता के लिए। इसके बाद मुझे प्रोजेक्ट नाम के आधार पर कार्यक्रमों के आधार पर अलग-अलग स्थानों में बिल्ड जमा करने की सुविधा मिलती है, भले ही उन सभी के पास एक ही प्रोजेक्ट नाम होना चाहिए। स्थानीय रूप से, मैं अपने निर्देशिका नाम के साथ आधिकारिक परियोजना नाम को जोड़ सकता हूं ... – sage

1

मैं इस मामले के लिए CMAKE_CURRENT_LIST_DIR अधिक उपयुक्त

get_filename_component(ProjectId ${CMAKE_CURRENT_LIST_DIR} NAME) 
string(REPLACE " " "_" ProjectId ${ProjectId}) 
project(${ProjectId} C CXX)