※ ccmakeの話を追記しました(2019/01/04)
cmakeのconfiguration時のオプション一覧を表示させる方法をよく忘れるのでメモ。
cmakeではビルドオプションや各種のPathの情報を変数を通してやり取りします。
自分でCMakeLists.txt
を書いた場合は変数名とそこに何を入れればいいのかは大体把握できますが、OSSのように他人が書いたCMakeLists.txt
を使うときは設定項目の一覧を表示させたくなります。
ということでCMakeLists.txt
内で定義されている変数の一覧を表示する方法をまとめてみます。
cmakeで扱う変数は、cmakeスクリプト内で定義される変数, キャッシュ変数, INTERNALなキャッシュ変数, ターミナルで定義される環境変数に分類されますが、ビルドの設定項目の受け渡しにはキャッシュ変数を使うのが一般的です。 よって、この記事ではキャッシュ変数の一覧を表示させる方法を紹介します。
追記(2019/06/10)
『勝手に作るCMake入門』という連載記事を投稿しました。 CMakeの基本的な使い方をチュートリアル形式で紹介しています。 キャッシュ変数の役割などについても解説しているのでよければ読んでみてください。
cmake-gui/ccmakeから
Windowsでcmake-guiを使うときは、こんなかんじ↓にオプションの一覧を表示してくれます。 便利です。
cmakeの公式ページのインストーラーを使えばOSXやLinuxでもcmake-guiが使えるそうですが、Homebrewやaptなどのパッケージマネージャでインストールしたcmakeと競合する可能性があるのでオススメできません。
そのかわり*nix系ではccmakeというコマンドが用意されています。
cmake
した後にccmake
を叩くとこんなかんじ↓にオプションの一覧を表示してくれます。
cmake-guiと同じくこの画面上でキャッシュ変数を編集した後でConfigure, Generateを実行できます。
cmakeコマンドから
cmakeコマンドを使うときはcmake .. -L
のように-L
オプションを指定するとconfigurationの後にキャッシュ変数の一覧が表示されます。
ADVANCEDに設定されたキャッシュ変数も表示させたいときは-LA
オプションを指定すればよいです。
-- Cache values BUILD_SHARED_LIBS:BOOL=OFF CMAKE_BUILD_TYPE:STRING= CMAKE_INSTALL_PREFIX:PATH=/usr/local CMAKE_LIBTOOL:FILEPATH=/usr/bin/libtool ...
-LH
とすれば、変数に紐付けられているコメントも一緒に表示されます。
-- Cache values // Build shared libraries BUILD_SHARED_LIBS:BOOL=OFF // Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel ... CMAKE_BUILD_TYPE:STRING= // Install path prefix, prepended onto install directories. CMAKE_INSTALL_PREFIX:PATH=/usr/local ...
CMakeLists.txtのmessageから
configurationの際に必ず変数の一覧を表示させたい場合はCMakeLists.txt
の末尾に以下のスクリプトを追加すればよいです。
get_cmake_property(_variableNames CACHE_VARIABLES) list (SORT _variableNames) foreach (_variableName ${_variableNames}) message(STATUS "${_variableName}=${${_variableName}}") endforeach()
ただしcmakeの仕様上、add_subdirectory
などで追加した子ディレクトリのcmakeファイル内で定義された変数は親側には伝播しません。
そのため、このスクリプトを追加したCMakeLists.txt
より上位のcmakeファイル内で定義された変数しか表示されません。
そもそもConfigureの度に問答無用で変数一覧を表示するのはあまり親切ではないですね。。
以上、cmakeの設定項目一覧を表示する方法でした。