CMake: Bir komut dosyasında erişilebilir tüm değişkenleri yazdırın


222

CMake'de erişilebilir tüm değişkenleri yazdırmanın bir yolu olup olmadığını merak ediyorum. CMake değişkenleriyle ilgilenmiyorum - --help-variablesseçenekte olduğu gibi. Tanımladığım değişkenlerim veya dahil edilen komut dosyaları tarafından tanımlanan değişkenler hakkında konuşuyorum.

Şu anda dahil ediyorum:

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

Ve tüm dosyaları okumak ve mevcut olanı okumak yerine, burada bulunan tüm değişkenleri yazdırabileceğimi umuyordum - bunun yararlı olabileceğini bilmediğim bazı değişkenler bulabilirim. Öğrenmeye ve keşfetmeye yardımcı olmak iyi olurdu. Kesinlikle hata ayıklama / geliştirme içindir.

Bu, Lua'daki geçerli kapsama erişilebilen tüm yerel değişkenleri yazdır , ancak CMake için!

Bunu yapan var mı?

Yanıtlar:


370

get_cmake_propertyİşlevi kullanarak, aşağıdaki döngü tanımlanan tüm CMake değişkenlerini ve değerlerini yazdırır:

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

Bu aynı zamanda, yalnızca eşleşen adlara sahip değişkenlerin bir alt kümesini yazdırmak için isteğe bağlı olarak normal bir ifade kullanabilen bir kullanışlılık işlevine gömülebilir.

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

Ortam değişkenlerini yazdırmak için CMake'in komut modunu kullanın :

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

Bu çok kullanışlı bir pasaj. Komut satırında ayarladığım ENV değişkenlerini neden yazdırmıyor ?
IgorGanapolsky

2
@Geremia bu kod bloğunu myfile.txt dosyasına kopyalayıp çalıştırabilirsiniz: cmake -P myfile.txt
Idok

2
VARIABLESyalnızca "geçerli dizinde tanımlanan değişkenleri" listeler. cmake.org/cmake/help/latest/prop_dir/…
CivFan

1
Ben kaldırmak zorunda STATUSden messageçıkış görünür olabilmesi için komuta.
luator

Benim için çalışmadı. tüm aldığım CMAKE_ *
C Johnson

173

Başka bir yol da basitçe:

cmake -LAH

Gönderen man :

-L[A][H]

Gelişmiş olmayan önbelleğe alınmış değişkenleri listeler.

Liste önbellek değişkenleri CMake'i çalıştırır ve CMake önbelleğinden INTERNALveya olarak işaretlenmemiş tüm değişkenleri listeler ADVANCED. Bu, geçerli CMake ayarlarını etkin bir şekilde gösterecektir [...].

Eğer Abelirtilirse, o zaman aynı zamanda gelişmiş değişkenleri görüntüler.

Eğer Hbelirtilirse, o da her değişken için yardım gösterecektir.


4
Bunu yapı dizininizde yapın
jtsagata

5
Bu yöntemin sistem değişkenlerini (WIN32, UNIX, APPLE vb.) BASMADIĞINI unutmayın.
holocronweaver

4
Bu, kullanılabilir tüm kitaplıkları yazdırmaz, yalnızca önbelleğe alınmış kitaplıkları yazdırır.
rafalcieslak

2
Bu, tüm değişkenleri yazdırmaz, yalnızca önbelleğe alınanları yazdırır. (FTFY rafa)
Qwertie

9

ccmakeinteraktif önbelleğe inspect değişkenler (iyi bir interaktif seçenektir option(ya set( CACHE:

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


3
Yararlı bir araç :) Ancak, sorular tüm değişkenleri yazdırmak istiyor .. ama bu sadece önbelleğe alınmış değişkenleri ortaya çıkaracaktır.
OLL
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.