2015-07-10 8 views
5

मान लीजिए मेरे पास फू नामक एक पैकेज है। यदि मैं सीएमके को एक CMakeLists.txt फ़ाइल पर चलाता हूं जिसमें find_package(Foo) है, तो मैं ${Foo_LIBRARIES} और ${Foo_INCLUDES} जैसे चर के मान मुद्रित कर सकता हूं।सीएमके चर प्रदर्शित करना

क्या इन चरों को किसी CMakeLists.txt फ़ाइल पर सीएमके चलाने के बिना प्रदर्शित करने का कोई आसान तरीका है, और config.cmake फ़ाइल का मैन्युअल रूप से निरीक्षण किए बिना?

उत्तर

1

ये चर आमतौर पर FindFoo.cmake में हार्डकोड किए जाते हैं ताकि पहले कार्य को चलाने के बिना उन्हें निकालना संभव न हो। ध्यान दें कि कभी-कभी Foo_LIBRARIES का मान सिस्टम कॉन्फ़िगरेशन पर निर्भर करता है, जो find_package (Foo) चलाए जाने तक अज्ञात है।

1

सीएमके चलाएं और ccmake के साथ कैश पर नज़र डालें। फिर आपको सभी चर मिलेंगे।

या -LH. के साथ सीएमके चलाएं तो आपको कॉन्फ़िगरेशन के बाद मुद्रित सभी चर मिलेगा।

तो मुझे लगता है कि सीएमके चलाने के बिना चर प्राप्त करना संभव नहीं है।

1

खोज-पैकेज मोड में cmake चलाएं। पुस्तकालयों को प्रदर्शित करने के

cmake -DNAME=ZLIB -DCOMPILER_ID=GNU -DLANGUAGE=C -DMODE=COMPILE --find-package 

उदाहरण:: उदाहरण प्रदर्शित करने के लिए एक package`s निर्देशिका में शामिल

cmake -DNAME=ZLIB -DCOMPILER_ID=GNU -DLANGUAGE=C -DMODE=LINK --find-package 

NAME पैकेज नाम पर सेट किया जाना चाहिए। आप COMPILER_IDthis page पर प्राप्त कर सकते हैं। LANGUAGEC, CXX या Fortran हो सकता है।

2

आपने पूछा: (1) क्या इन चरों को cmakeLists.txt फ़ाइल पर cmake चलाने के बिना प्रदर्शित करने का कोई आसान तरीका है, और (2) config.cmake फ़ाइल का मैन्युअल रूप से निरीक्षण किए बिना?

मैं आपको एक हां जवाब दे सकता हूं (2) लेकिन यह आवश्यक है कि आप (से) रनमेक चलाएं। लेकिन चूंकि आप बिल्ड निर्देशिका में cmake . निष्पादित करके अपने सेमेक कॉन्फ़िगर चरण को फिर से चला सकते हैं, फिर से चलने वाले सेमेक को आपको इस दृष्टिकोण को आजमाने से नहीं रोकना चाहिए। मेरा उत्तर इस SO answer में दिया गया है और get_cmake_property कमांड का उपयोग करता है। यहां वह कोड है जो एक सेमेक मैक्रो, print_all_variables में encapsulated है, इसलिए मैं अपने cmake स्क्रिप्ट्स डीबगिंग करते समय इसका उपयोग कर सकते हैं।

macro(print_all_variables) 
    message(STATUS "print_all_variables------------------------------------------{") 
    get_cmake_property(_variableNames VARIABLES) 
    foreach (_variableName ${_variableNames}) 
     message(STATUS "${_variableName}=${${_variableName}}") 
    endforeach() 
    message(STATUS "print_all_variables------------------------------------------}") 
endmacro()