CMake: एक स्क्रिप्ट में सभी सुलभ चर का प्रिंट आउट लें


222

मुझे आश्चर्य है कि क्या सीएमके में सभी सुलभ चर को प्रिंट करने का कोई तरीका है। मैं सीएमके चर में दिलचस्पी नहीं ले रहा हूं - जैसा कि --help-variablesविकल्प में है। मैं अपने चरों के बारे में बात कर रहा हूं जिन्हें मैंने परिभाषित किया है, या शामिल लिपियों द्वारा परिभाषित चर।

मैं वर्तमान में शामिल हूं:

INCLUDE (${CMAKE_ROOT}/Modules/CMakeBackwardCompatibilityCXX.cmake)

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

यह लुआ में वर्तमान क्षेत्र के लिए सुलभ सभी स्थानीय चर प्रिंट में प्रश्न के समान है , लेकिन सीएमके के लिए!

क्या किसी ने ऐसा किया है?

जवाबों:


370

get_cmake_propertyफ़ंक्शन का उपयोग करते हुए , निम्नलिखित लूप परिभाषित किए गए सभी सीएमके चर और उनके मूल्यों को प्रिंट करेगा:

get_cmake_property(_variableNames VARIABLES)
list (SORT _variableNames)
foreach (_variableName ${_variableNames})
    message(STATUS "${_variableName}=${${_variableName}}")
endforeach()

इसे एक सुविधा फ़ंक्शन में भी एम्बेड किया जा सकता है जो वैकल्पिक रूप से मिलान नामों के साथ केवल चर का एक सबसेट प्रिंट करने के लिए एक नियमित अभिव्यक्ति का उपयोग कर सकता है

function(dump_cmake_variables)
    get_cmake_property(_variableNames VARIABLES)
    list (SORT _variableNames)
    foreach (_variableName ${_variableNames})
        if (ARGV0)
            unset(MATCHED)
            string(REGEX MATCH ${ARGV0} MATCHED ${_variableName})
            if (NOT MATCHED)
                continue()
            endif()
        endif()
        message(STATUS "${_variableName}=${${_variableName}}")
    endforeach()
endfunction()

पर्यावरण चर प्रिंट करने के लिए, CMake कमांड मोड का उपयोग करें :

execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "environment")

यह एक बहुत ही उपयोगी स्निपेट है। यह ईएनवी चर प्रिंट आउट क्यों नहीं करता है जो मैंने कमांड लाइन पर सेट किया है?
इगोरगानपोलस्की

2
आप फ़ाइल के लिए इस कोड ब्लॉक कॉपी कर सकते हैं @Geremia myfile.txt : और रन cmake -पी myfile.txt
Idok

2
VARIABLESकेवल "मौजूदा निर्देशिका में परिभाषित चर" सूचीबद्ध करता है। cmake.org/cmake/help/latest/prop_dir/…
CivFan

1
मुझे आउटपुट दिखने के लिए कमांड STATUSसे हटाना पड़ा message
लूलेटर

मेरे लिए काम नहीं किया। मुझे मिला सभी चर CMAKE_ *
C जॉनसन

173

एक अन्य तरीका यह है कि बस उपयोग करें:

cmake -LAH

से मैनपेज :

-L[A][H]

गैर-उन्नत कैश्ड चर सूचीबद्ध करें।

सूची कैश चर सीएमके को चलाएंगे और सीएमके कैश से उन सभी चर को सूचीबद्ध करेंगे जो INTERNALया तो चिह्नित नहीं हैं ADVANCED। यह प्रभावी रूप से वर्तमान सीएमके सेटिंग्स को प्रदर्शित करेगा [...]।

यदि Aनिर्दिष्ट किया गया है, तो यह उन्नत चर भी प्रदर्शित करेगा।

यदि Hनिर्दिष्ट किया गया है, तो यह प्रत्येक चर के लिए मदद भी प्रदर्शित करेगा।


4
अपनी बिल्ड डायरेक्टरी पर ऐसा करें
jtsagata

5
ध्यान दें कि यह विधि सिस्टम चर (WIN32, UNIX, APPLE, आदि) को प्रिंट नहीं करती है।
होलोक्रोनेवर

4
यह सभी उपलब्ध पुस्तकालयों को प्रिंट नहीं करता है, केवल कैश्ड वाले।
rafalcieslak

2
यह सभी वैरिएबल को प्रिंट नहीं करता है, केवल कैश्ड वाले हैं। (
एफटीएफवाई राफा

9

ccmakeकैश्ड वैरिएबल ( option(या set( CACHE: इंटरेक्टिव रूप से निरीक्षण करने के लिए एक अच्छा इंटरैक्टिव विकल्प है

sudo apt-get install cmake-curses-gui
mkdir build
cd build
cmake ..
ccmake ..


3
उपयोगी उपकरण :) हालांकि, प्रश्न सभी चर को प्रिंट करने के लिए कहते हैं .. लेकिन यह केवल कैश्ड चर को प्रकट करेगा।
OLL
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.