2011-12-12 9 views
18

कुछ इस तरह:कमांड लाइन से सीएमके चर कैसे प्राप्त करें?

cmake --get-variable=MY_CMAKE_VARIABLE 

चर एक शामिल CMake फ़ाइल में मौजूद हो सकता है।

+1

प्रश्न थोड़ा अस्पष्ट है: क्या आप कमांड लाइन पर चर के लिए मान निर्दिष्ट करना चाहते हैं? या आप कुछ सीएमकेफ़ाइल से मौजूदा चर निकालने की इच्छा रखते हैं और क्या सेमीकैम इसे मानक आउट प्रिंट करते हैं? –

उत्तर

15

आपका मौजूदा संचय फ़ाइल, आप कर सकते हैं:

grep MY_CMAKE_VARIABLE CMakeCache.txt 

यदि आपने अभी तक कैश फ़ाइल नहीं है, तो आप और क्या विकल्प वहाँ एक CMakeLists.txt फ़ाइल में हैं देखना चाहते हैं, आप (एक अलग निर्देशिका में के बाद से इस संचय फ़ाइल लिखेंगे) कर सकते हैं:

cmake -L /path/to/CMakeLists.txt | grep MY_CMAKE_VARIABLE 

जो

की तरह कुछ आप के लिए वापस आ जाएगी

यदि यह एक उन्नत चर है, तो एक ही कमांड में -ए ध्वज जोड़ें और इसमें उन्नत चर शामिल होंगे। बेशक, अगर आप केवल मूल्य चाहते हैं, आप कर सकते हैं:

cmake -L /path/to/CMakeLists.txt | grep MY_CMAKE_VARIABLE | cut -d "=" -f2 

संपादित

उदाहरण के लिए, एक CMakeLists.txt है कि साथ:

cmake_minimum_required(VERSION 2.8) 

project(test) 

include(otherFile.txt) 

set(MY_VAR "Testing" CACHE STRING "") 

और जहां otherFile। txt है:

set(MY_OTHER_VAR "Hi" CACHE STRING "") 

आदेश (दूसरी निर्देशिका से चलाएं):

cmake -L ../cmaketest 

देता है:

-- The C compiler identification is GNU 
-- The CXX compiler identification is GNU 
-- Check for working C compiler: /usr/bin/gcc 
-- Check for working C compiler: /usr/bin/gcc -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: /usr/bin/c++ 
-- Check for working CXX compiler: /usr/bin/c++ -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/tgallagher/cmaketest-build 
-- Cache values 
CMAKE_BUILD_TYPE:STRING= 
CMAKE_INSTALL_PREFIX:PATH=/usr/local 
MY_OTHER_VAR:STRING=Hi 
MY_VAR:STRING=Testing 

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

यदि आपके चर को आंतरिक के रूप में चिह्नित किया गया है या बिल्कुल नहीं देखा गया है, तो इसे खींचने के लिए सीएमके के भीतर कोई विधि नहीं है। लेकिन, गैर-कैच किए गए चर क्षणिक होने के लिए हैं, इसलिए मुझे यकीन नहीं है कि आपको किसी भी तरह के निर्माण वातावरण के बाहर क्यों आवश्यकता होगी।

+0

से पूछा नहीं है कि इनमें से कोई भी सुझाव अन्य सीएमकेफ़ाइल – Allan

+0

से शामिल चर के लिए काम करता प्रतीत होता है जिसमें एक अन्य उदाहरण है जिसमें अन्य सेमेक फाइलें शामिल हैं। आप क्या हासिल करने का प्रयास कर रहे हैं? शायद एक और तरीका है, या चर सेट करने का एक तरीका है ताकि आप उन्हें ऊपर के दृष्टिकोण के साथ उपयोग कर सकें। – tpg2114

-1

-D <var>:<type>=<value>:

जब cmake एक खाली निर्माण पेड़ में पहली बार चलाने है, यह एक CMakeCache.txt फ़ाइल बनाता है और इस परियोजना के लिए अनुकूलन सेटिंग्स के साथ यह भरता है। इस विकल्प का उपयोग ऐसी सेटिंग निर्दिष्ट करने के लिए किया जा सकता है जो प्रोजेक्ट के डिफ़ॉल्ट मान पर प्राथमिकता लेता है। वांछित के रूप में कई कैश प्रविष्टियों के लिए विकल्प दोहराया जा सकता है।

+1

ओपी ने –

2

यदि आपको गैर कैश किए गए उपयोगकर्ता चर की आवश्यकता है लेकिन मूल cmake स्क्रिप्ट संपादित नहीं कर सकते हैं, तो आप एक चाल का सहारा ले सकते हैं। निम्नलिखित सामग्री के साथ एक और निर्देशिका में नई CMakeLists.txt फ़ाइल बनाएँ:

include(<Path to original CMakeLists.txt>) 

message(STATUS "MY_VAR={${MY_VAR}}") 

यह संभव है, cmake जबकि नए निर्देशिका में चल त्रुटियों की एक बहुत कुछ कर दिया जाएगा।मूल स्क्रिप्ट में उपयोग किए जाने वाले सापेक्ष पथ, निश्चित रूप से ऐसी त्रुटियों का कारण हैं। लेकिन cmake आपके चर के लिए आवंटित अंतिम मान मुद्रित करेगा। इसके अलावा, सभी त्रुटियों और चेतावनियों किसी भी अच्छी तरह से जाना पाठ प्रोसेसर का उपयोग उसे फ़िल्टर (यूनिक्स मान परिचित), उदाहरण के लिए:

cmake . | sed -n 's/-- MY_VAR={\(.*\)}/\1/p' 2>&1 

मैं परियोजनाओं रखरखाव लिपियों में इस दृष्टिकोण का उपयोग, यह रूप में लंबे समय मूल CMakeLists.txt नहीं है के रूप में मज़बूती से है वाक्यविन्यास त्रुटियां

1

उपयोग:

cmake -LA -N /path/to/project 

सभी कैश मूल्यों की एक सूची प्राप्त करने के लिए। -एन महत्वपूर्ण है; यह सेमेक को किसी भी बिल्ड फाइल बनाने की कोशिश करने से रोकता है, और आपको दिखाता है कि कैश में क्या है।

संबंधित मुद्दे