CMake:スクリプト内のすべてのアクセス可能な変数を出力します


222

CMakeですべてのアクセス可能な変数を出力する方法があるかどうか疑問に思っています。--help-variablesオプションのように、CMake変数には興味がありません。私が定義した変数、または含まれているスクリプトによって定義された変数について話しています。

私は現在含まれています:

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

そして、すべてのファイルを調べて、利用可能なものを読む必要がなく、ここにあるすべての変数を出力できることを望んでいました-知らない変数が役に立つかもしれません。学習と発見を助けるのは良いことです。厳密にデバッグ/開発用です。

これは、Lmakeaの現在のスコープにアクセスできるすべてのローカル変数を出力するの質問に似ていますが、CMakeの場合です。

誰かこれをやったことがありますか?

回答:


368

get_cmake_property関数を使用して、次のループは定義されているすべてのCMake変数とその値を出力します。

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

これは非常に便利なスニペットです。コマンドラインで設定したENV変数を出力しないのはなぜですか?
IgorGanapolsky

2
@Geremiaこのコードブロックをファイルmyfile.txtにコピーして実行できます:cmake -P myfile.txt
Idok

2
VARIABLES「現在のディレクトリで定義されている変数」のみを一覧表示します。cmake.org/cmake/help/latest/prop_dir/...
CivFan

1
出力を表示するにSTATUSは、messageコマンドからを削除する必要がありました。
ルアー

私のために働いていませんでした。私が得たのは、CMAKE_ *で始まる変数のみでした
C Johnson

173

別の方法は、単に使用することです:

cmake -LAH

マンページから:

-L[A][H]

高度ではないキャッシュ変数をリストします。

リストキャッシュ変数はCMakeを実行し、INTERNALまたはとしてマークされていないCMakeキャッシュからのすべての変数をリストしますADVANCED。これにより、現在のCMake設定が効果的に表示されます[...]。

Aが指定されている場合、高度な変数も表示されます。

場合はH指定されている、それはまた、各変数のヘルプを表示します。


4
これをビルドディレクトリで行います
jtsagata '16 / 09/13

5
このメソッドはシステム変数(WIN32、UNIX、APPLEなど)を出力しないことに注意してください。
holocronweaver 2015年

4
これは、利用可能なすべてのライブラリを出力するのではなく、キャッシュされたライブラリのみを出力します。
rafalcieslak

2
これはすべての変数を出力するのではなく、キャッシュされた変数のみを出力します。(FTFY rafa)
Qwertie 2018年

9

ccmakeインタラクティブにキャッシュされた変数(option(またはset( CACHE

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


3
便利なツール:)ただし、質問ではすべての変数を出力するように求められますが、これはキャッシュされた変数のみを表示します。
OLL 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.