このようなもの:
cmake --get-variable=MY_CMAKE_VARIABLE
変数は、インクルードされたCMakeファイルに存在する可能性があります。
既存のキャッシュファイルがある場合は、次のことができます。
grep MY_CMAKE_VARIABLE CMakeCache.txt
まだキャッシュファイルがなく、CMakeLists.txtファイルにあるオプションを確認したい場合は、(これによりキャッシュファイルが書き込まれるため、別のディレクトリで)実行できます。
cmake -L /path/to/CMakeLists.txt | grep MY_CMAKE_VARIABLE
それはあなたのようなものに戻ります
<VARIABLE>:<TYPE>=<VALUE>
高度な変数の場合は、同じコマンドに-Aフラグを追加すると、高度な変数が含まれます。もちろん、値だけが必要な場合は、次のことができます。
cmake -L /path/to/CMakeLists.txt | grep MY_CMAKE_VARIABLE | cut -d "=" -f2
[〜#〜]編集[〜#〜]
たとえば、次のようなCMakeLists.txtがあるとします。
cmake_minimum_required(VERSION 2.8)
project(test)
include(otherFile.txt)
set(MY_VAR "Testing" CACHE STRING "")
そして、otherFile.txtは次のとおりです。
set(MY_OTHER_VAR "Hi" CACHE STRING "")
コマンド(別のディレクトリから実行):
cmake -L ../cmaketest
与える:
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/tgallagher/cmaketest-build
-- Cache values
CMAKE_BUILD_TYPE:STRING=
CMAKE_INSTALL_PREFIX:PATH=/usr/local
MY_OTHER_VAR:STRING=Hi
MY_VAR:STRING=Testing
したがって、他のファイルの変数が表示されます。ビルド全体を解析する必要があります。ただし、問題はCACHEでマークされていない変数を表示しないことです。また、内部にキャッシュされているものは表示されず、-Lの代わりに-LAが使用されている場合にのみADVANCEDが表示されます。
変数がINTERNALとしてマークされているか、キャッシュされていない場合、CMake内で変数を取り出す方法はありません。ただし、キャッシュされていない変数は一時的なものであるため、ビルド環境の外でなぜ必要になるのかはわかりません。
使用する:
cmake -LA -N /path/to/project
すべてのキャッシュ値のリストを取得します。 -Nは重要です。 cmakeがビルドファイルを生成しようとするのを防ぎ、キャッシュの内容を表示するだけです。
必要な変数が設定しているものではなく、デフォルトのものである場合は、使用できます
cmake --system-information
そして、それをグレップ。少し遅いようですが、1、2秒かかるようです。たとえば、最初にcmake変数を構成するためにこれを行おうとすると、カートが馬の前に出ることを回避できます。 :)
これにファイル名を渡すこともできます。したがって、ファイルが存在しない場合にのみ生成を試み、存在する場合はファイルを解析することができます(その1〜2秒を節約するため)。
必要な場合 キャッシュされない ユーザー変数ですが、元のcmakeスクリプトを編集できません。トリックを使用する場合があります。次の内容で、別のディレクトリに新しいCMakeLists.txtファイルを作成します。
include(<Path to original CMakeLists.txt>)
message(STATUS "MY_VAR={${MY_VAR}}")
新しいディレクトリで実行している間、cmakeは多くのエラーを発生させる可能性があります。相対パスは、元のスクリプトで使用されている場合、間違いなくそのようなエラーの原因です。しかし、cmakeは変数に割り当てられた最後の値を出力します。さらに、よく知られているテキストプロセッサ(UNIXに精通していると想定)を使用して、すべてのエラーと警告をフィルタリングします。次に例を示します。
cmake . | sed -n 's/-- MY_VAR={\(.*\)}/\1/p' 2>&1
私はプロジェクトメンテナンススクリプトでこのアプローチを使用していますが、元のCMakeLists.txtに構文エラーがない限り確実に機能します。