CMakeコマンド mark_as_advanced() の詳細解説

2024-04-02

CMakeコマンド mark_as_advanced() の詳細解説

mark_as_advanced() は、CMakeプロジェクトで特定のキャッシュ変数を "詳細設定" としてマークするために使用されるコマンドです。このコマンドによって、GUI ツールでこれらの変数はデフォルトでは表示されなくなり、ユーザーは "詳細設定" オプションを有効にするまで編集できなくなります。

コマンドフォーマット

mark_as_advanced(<変数名1> [<変数名2> ...])

引数

  • <変数名>: 詳細設定としてマークするキャッシュ変数の名前。複数の変数を指定する場合は、スペースで区切ります。

オプション

  • CLEAR: 最初の引数として CLEAR を指定すると、以前に mark_as_advanced() で設定された詳細設定フラグがすべてクリアされます。

動作

mark_as_advanced() コマンドは、指定されたキャッシュ変数に ADVANCED フラグを設定します。このフラグが設定された変数は、GUI ツールで "詳細設定" オプションが有効でない限り、デフォルトでは表示されません。

# FOO と BAR というキャッシュ変数を詳細設定としてマーク
mark_as_advanced(FOO BAR)

# すべての詳細設定フラグをクリア
mark_as_advanced(CLEAR)

詳細

  • mark_as_advanced() コマンドは、CMake バージョン 3.0 以降で使用できます。
  • 詳細設定としてマークされた変数は、cmake-gui などの GUI ツールで "詳細設定" パネルに表示されます。
  • 詳細設定としてマークされた変数は、コマンドラインから引き続き編集できます。
  • 詳細設定フラグは、キャッシュファイルに保存されます。

補足

  • mark_as_advanced() コマンドは、ユーザーインターフェースを簡素化し、初心者ユーザーを混乱させないようにするために使用できます。
  • 詳細設定としてマークされた変数は、上級ユーザー向けのオプションであることを示すために使用できます。
  • 詳細設定としてマークされた変数は、プロジェクトのビルドに不可欠ではない変数であることを示すために使用できます。

関連コマンド

  • set_property(): キャッシュ変数のプロパティを設定するために使用されます。


CMakeコマンド mark_as_advanced() のサンプルコード

# FOO と BAR というキャッシュ変数を詳細設定としてマーク
mark_as_advanced(FOO BAR)

# すべての詳細設定フラグをクリア
mark_as_advanced(CLEAR)

詳細設定としてマークされた変数の使用例

# 詳細設定としてマークされた変数の値を設定
set(FOO "my_value" CACHE STRING ADVANCED)

# 詳細設定としてマークされた変数の値を取得
message("FOO is: ${FOO}")

# 詳細設定パネルで FOO 変数を編集可能にする
if(CMAKE_GUI)
  set_property(CACHE FOO PROPERTY STRINGS ADVANCED NO)
endif()

詳細設定フラグの確認

# FOO 変数が詳細設定としてマークされているかどうかを確認
if(IS_ADVANCED(FOO))
  message("FOO is an advanced variable")
else()
  message("FOO is not an advanced variable")
endif()

詳細設定パネルでの表示

# FOO 変数を詳細設定パネルに表示
set(FOO "my_value" CACHE STRING ADVANCED)

# GUI ツールで "詳細設定" オプションを有効にして FOO 変数を編集

詳細設定フラグの保存

# 詳細設定フラグをキャッシュファイルに保存
cmake_cache_store()


CMakeコマンド mark_as_advanced() の代替方法

キャッシュ変数の名前空間に ADVANCED_ という接頭辞を追加することで、その変数を "詳細設定" としてマークできます。例えば、以下のコードは FOO 変数を "詳細設定" としてマークします。

set(ADVANCED_FOO "my_value" CACHE STRING)

set_property() コマンドを使用して、キャッシュ変数の PROPERTY プロパティに ADVANCED フラグを設定できます。例えば、以下のコードは FOO 変数を "詳細設定" としてマークします。

set(FOO "my_value" CACHE STRING)
set_property(CACHE FOO PROPERTY ADVANCED TRUE)

コメントを使用する

キャッシュ変数の前にコメントを追加することで、その変数を "詳細設定" としてマークできます。例えば、以下のコードは FOO 変数を "詳細設定" としてマークします。

# 詳細設定:
set(FOO "my_value" CACHE STRING)

GUI ツールを使用する

多くの CMake GUI ツールは、詳細設定パネルで特定の変数を "詳細設定" としてマークするための機能を提供しています。

どの方法を選択するべきかは、プロジェクトの要件と個人的な好みによって異なります。

  • キャッシュ変数の名前空間を使用する方法は、最も簡潔で分かりやすい方法です。
  • set_property() コマンドを使用する方法は、より柔軟な方法です。
  • コメントを使用する方法は、最も簡単な方法ですが、他の方法と比べて分かりにくいです。
  • GUI ツールを使用する方法は、最も視覚的な方法ですが、GUI ツールを使用していない場合は使用できません。

補足

  • 詳細設定としてマークされた変数は、GUI ツールで "詳細設定" オプションが有効でない限り、デフォルトでは表示されません。