সিএমকে: স্ক্রিপ্টে সমস্ত অ্যাক্সেসযোগ্য ভেরিয়েবলগুলি মুদ্রণ করুন


222

আমি ভাবছি যে সিএমকেতে সমস্ত অ্যাক্সেসযোগ্য ভেরিয়েবলগুলি মুদ্রণ করার কোনও উপায় আছে কিনা। আমি সিএমকে পরিবর্তনশীলগুলিতে আগ্রহী নই - --help-variablesবিকল্প হিসাবে । আমি আমার ভেরিয়েবলগুলি সম্পর্কে আমি কথা বলছি যা আমি সংজ্ঞায়িত করেছি, বা অন্তর্ভুক্ত স্ক্রিপ্টগুলি দ্বারা সংজ্ঞাযুক্ত ভেরিয়েবলগুলি।

আমি বর্তমানে অন্তর্ভুক্ত করছি:

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

এবং আমি আশা করছিলাম যে আমি এখানে থাকা সমস্ত ভেরিয়েবলগুলি কেবল মুদ্রণ করতে পারব, পরিবর্তে সমস্ত ফাইলের মধ্যে পড়ে এবং কী উপলব্ধ ছিল তা পড়ার পরিবর্তে - আমি এমন কিছু ভেরিয়েবলগুলি খুঁজে পেতে পারি যার সম্পর্কে আমি জানতাম না যে এটি কার্যকর হতে পারে। পড়াশোনা এবং আবিষ্কার সহায়তা করা ভাল হবে। এটি ডিবাগিং / বিকাশের জন্য কঠোরভাবে।

এটি লুয়ার বর্তমান স্কোপে অ্যাক্সেসযোগ্য সমস্ত স্থানীয় ভেরিয়েবলগুলি মুদ্রণের প্রশ্নের অনুরূপ , তবে সিএমকে!

কেউ কি এই কাজ করেছে?

উত্তর:


368

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()

এনভায়রনমেন্ট ভেরিয়েবল মুদ্রণ করতে, সিএমকের কমান্ড মোডটি ব্যবহার করুন :

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

এটি একটি খুব দরকারী স্নিপেট। কেন আমি কমান্ড লাইনে সেট করা ENV ভেরিয়েবলগুলি মুদ্রণ করব না ?
ইগোরগানাপলস্কি

2
ফাইল করার জন্য এই কোড ব্লক অনুলিপি করতে পারেন @Geremia myfile.txt : এবং চালানোর cmake -P myfile.txt
Idok

2
VARIABLESকেবলমাত্র "বর্তমান ডিরেক্টরিতে সংজ্ঞায়িত ভেরিয়েবলগুলি" তালিকাভুক্ত করে। cmake.org/cmake/help/latest/prop_dir/…
সিভিফ্যান

1
আউটপুট দৃশ্যমান হওয়ার জন্য আমাকে কমান্ড STATUSথেকে অপসারণ করতে হয়েছিল message
luator

আমার পক্ষে কাজ করেনি। আমার যা কিছু পেয়েছিল তা CMAKE_ *
সি জনসন

173

আর একটি উপায় সহজভাবে ব্যবহার করা হয়:

cmake -LAH

ম্যানপেজ থেকে :

-L[A][H]

অ-উন্নত ক্যাশে ভেরিয়েবল তালিকাবদ্ধ করুন।

তালিকা ক্যাশে ভেরিয়েবল CMake এবং তালিকা CMake ক্যাশে যে হিসাবে চিহ্নিত করা হয় না থেকে সব ভেরিয়েবল চালানো হবে INTERNALবা ADVANCED। এটি কার্যকরভাবে বর্তমান সিএমকে সেটিংস প্রদর্শন করবে [...]।

যদি Aনির্দিষ্ট করা থাকে, তবে এটি উন্নত ভেরিয়েবলগুলিও প্রদর্শন করবে।

যদি Hনির্দিষ্ট করা থাকে তবে এটি প্রতিটি ভেরিয়েবলের জন্য সহায়তা প্রদর্শন করবে।


4
আপনার বিল্ড ডিরেক্টরিতে এটি করুন
jtsagata

5
নোট করুন যে এই পদ্ধতিটি সিস্টেম ভেরিয়েবলগুলি মুদ্রণ করে না (WIN32, UNIX, অ্যাপল ইত্যাদি)।
হলোক্রনউইভার

4
এটি সমস্ত উপলব্ধ গ্রন্থাগারগুলি মুদ্রণ করে না, কেবল ক্যাশেযুক্তগুলি।
রাফাল্যাক্সিলাক

2
এটি সমস্ত ভেরিয়েবল মুদ্রণ করে না, কেবল ক্যাশেডগুলি। (এফটিএফওয়াই রাফা)
কিওয়ারটি

9

ccmakeআন্তঃক্রমে ক্যাশেড ভেরিয়েবলগুলি পরিদর্শন করার জন্য একটি ভাল ইন্টারেক্টিভ বিকল্প ( option(বা set( CACHE:

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


3
দরকারী সরঞ্জাম :) তবে, প্রশ্নগুলি সমস্ত ভেরিয়েবলগুলি মুদ্রণ করতে বলে .. তবে এটি কেবল ক্যাশেড ভেরিয়েবলগুলিই প্রকাশ করবে।
OLL
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.