CMake: Cetak semua variabel yang dapat diakses dalam skrip

222

Saya bertanya-tanya apakah ada cara untuk mencetak semua variabel yang dapat diakses di CMake. Saya tidak tertarik pada variabel CMake - seperti pada --help-variablesopsi. Saya berbicara tentang variabel saya yang saya definisikan, atau variabel yang didefinisikan oleh skrip yang disertakan.

Saat ini saya termasuk:

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

Dan saya berharap saya bisa mencetak semua variabel yang ada di sini, daripada harus membaca semua file dan membaca apa yang tersedia - saya mungkin menemukan beberapa variabel yang saya tidak tahu tentang hal itu mungkin berguna. Akan baik untuk membantu pembelajaran & penemuan. Ini hanya untuk debugging / pengembangan.

Ini mirip dengan pertanyaan di Cetak semua variabel lokal yang dapat diakses ke lingkup saat ini di Lua , tetapi untuk CMake!

Adakah yang melakukan ini?

Michael
sumber

Jawaban:

368

Dengan menggunakan get_cmake_propertyfungsi ini, loop berikut akan mencetak semua variabel CMake yang ditentukan dan nilainya:

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

Ini juga dapat disematkan dalam fungsi kenyamanan yang secara opsional dapat menggunakan ekspresi reguler untuk mencetak hanya sebagian dari variabel dengan nama yang cocok

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

Untuk mencetak variabel lingkungan, gunakan mode perintah CMake :

execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "environment")
sakra
sumber
Cuplikan yang sangat berguna. Mengapa tidak mencetak variabel ENV yang saya atur di baris perintah?
IgorGanapolsky
2
@ Geremia Anda dapat menyalin blok kode ini ke file myfile.txt dan menjalankan: cmake -P myfile.txt
Idok
2
VARIABLEShanya mencantumkan "variabel yang ditentukan dalam direktori saat ini." cmake.org/cmake/help/latest/prop_dir/…
CivFan
1
Aku harus menghapus STATUSdari messageperintah untuk output yang akan terlihat.
luator
Tidak bekerja untuk saya. semua yang saya dapatkan adalah variabel yang dimulai dengan CMAKE_ *
C Johnson
173

Cara lain adalah dengan menggunakan:

cmake -LAH

Dari halaman manual :

-L[A][H]

Daftar variabel cache tidak lanjut.

Variabel cache daftar akan menjalankan CMake dan mencantumkan semua variabel dari cache CMake yang tidak ditandai sebagai INTERNALatau ADVANCED. Ini secara efektif akan menampilkan pengaturan CMake saat ini [...].

Jika Aditentukan, maka itu akan menampilkan juga variabel lanjutan.

Jika Hditentukan, itu juga akan menampilkan bantuan untuk setiap variabel.

jtsagata
sumber
4
Lakukan ini di direktori build Anda
jtsagata
5
Perhatikan bahwa metode ini TIDAK mencetak variabel sistem (WIN32, UNIX, APPLE, dll.).
holocronweaver
4
Ini tidak mencetak semua perpustakaan yang tersedia, hanya yang di-cache.
rafalcieslak
2
Ini tidak mencetak semua variabel, hanya yang di-cache. (FTFY rafa)
Qwertie
9

ccmakeadalah opsi interaktif yang baik untuk secara interaktif memeriksa variabel yang di-cache ( option(atau set( CACHE:

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

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
sumber
3
Alat yang berguna :) Namun, pertanyaannya meminta untuk mencetak semua variabel .. tetapi ini hanya akan mengungkapkan variabel yang di-cache.
OLL