CMake: variable_requires() コマンドでプロジェクトのコードをより読みやすく、保守しやすくする
variable_requires()
コマンドは、CMake プロジェクトにおいて、特定のオプションが有効化されている場合に、必要な変数が設定されていることを確認するために使用されます。オプションが有効化されていない場合、このコマンドは何も実行しません。
構文
variable_requires(
<TEST_VARIABLE>
<RESULT_VARIABLE>
<VARIABLE1>
...
<VARIABLEN>
)
引数
<VARIABLE1>
...<VARIABLEN>
: 必要な変数の名前。これらの変数がTRUE
またはNOTFOUND
に設定されていない場合、エラーが報告されます。<RESULT_VARIABLE>
: すべての必要な変数が設定されている場合にTRUE
に設定される変数。<TEST_VARIABLE>
: テスト対象のオプションの名前。この変数がFALSE
の場合、何も実行されません。
例
option(MY_OPTION "Enable my option" OFF)
variable_requires(
MY_OPTION
MY_OPTION_REQUIRED
MY_OPTION_VARIABLE1
MY_OPTION_VARIABLE2
)
if (MY_OPTION_REQUIRED)
message(STATUS "All required variables for MY_OPTION are set")
else()
message(STATUS "MY_OPTION is not enabled, so required variables are not checked")
endif()
この例では、MY_OPTION
オプションが有効化されている場合、MY_OPTION_REQUIRED
変数が TRUE
に設定され、MY_OPTION_VARIABLE1
と MY_OPTION_VARIABLE2
変数が設定されていることを確認します。MY_OPTION
オプションが有効化されていない場合、このコマンドは何も実行しません。
variable_requires()
コマンドは、オプションが有効化されていない場合にエラーを報告する代わりに、警告メッセージを表示するように設定することもできます。variable_requires()
コマンドは、オプションとその必要な変数の関係を明示的に記述することで、CMake プロジェクトのコードをより読みやすく、保守しやすくすることができます。variable_requires()
コマンドは、CMake 3.30 以降で使用できます。
option(MY_OPTION "Enable my option" OFF)
variable_requires(
MY_OPTION
MY_OPTION_REQUIRED
MY_OPTION_VARIABLE1
MY_OPTION_VARIABLE2
)
if (MY_OPTION_REQUIRED)
message(STATUS "All required variables for MY_OPTION are set")
else()
message(STATUS "MY_OPTION is not enabled, so required variables are not checked")
endif()
説明
MY_OPTION
オプションが有効化されていない場合、このコマンドは何も実行しません。- この例では、
MY_OPTION
オプションが有効化されている場合、MY_OPTION_REQUIRED
変数がTRUE
に設定され、MY_OPTION_VARIABLE1
とMY_OPTION_VARIABLE2
変数が設定されていることを確認します。
例2:オプションが有効化されていない場合に警告メッセージを表示する
option(MY_OPTION "Enable my option" OFF)
variable_requires(
MY_OPTION
MY_OPTION_REQUIRED
MY_OPTION_VARIABLE1
MY_OPTION_VARIABLE2
WARNING
)
if (MY_OPTION_REQUIRED)
message(STATUS "All required variables for MY_OPTION are set")
else()
message(WARNING "MY_OPTION is not enabled, so required variables are not set")
endif()
説明
MY_OPTION
オプションが有効化されていない場合、このコマンドは警告メッセージを表示します。- この例では、
MY_OPTION
オプションが有効化されていない場合、MY_OPTION_REQUIRED
変数がTRUE
に設定され、MY_OPTION_VARIABLE1
とMY_OPTION_VARIABLE2
変数が設定されていることを確認します。
例3:オプションと必要な変数の関係を関数内で記述する
function(my_option_check)
option(MY_OPTION "Enable my option" OFF)
variable_requires(
MY_OPTION
MY_OPTION_REQUIRED
MY_OPTION_VARIABLE1
MY_OPTION_VARIABLE2
)
if (MY_OPTION_REQUIRED)
message(STATUS "All required variables for MY_OPTION are set")
else()
message(STATUS "MY_OPTION is not enabled, so required variables are not checked")
endif()
endfunction()
my_option_check()
my_option_check
関数は、CMakeLists.txt
ファイル内の任意の場所から呼び出すことができます。- この例では、
my_option_check
関数を使用して、MY_OPTION
オプションと必要な変数の関係を記述します。
variable_requires()
コマンドは、CMake プロジェクトにおいて、特定のオプションが有効化されている場合に、必要な変数が設定されていることを確認するために使用されます。しかし、このコマンドにはいくつかの制限があります。
variable_requires()
コマンドは、オプションとその必要な変数の関係を明示的に記述する必要があります。variable_requires()
コマンドは、CMake 3.30 以降で使用できます。
これらの制限を回避するために、variable_requires()
コマンドの代替方法をいくつか紹介します。
代替方法 1:if()
ステートメントと set()
コマンドを使用する
option(MY_OPTION "Enable my option" OFF)
if (MY_OPTION)
set(MY_OPTION_REQUIRED TRUE)
set(MY_OPTION_VARIABLE1 SET)
set(MY_OPTION_VARIABLE2 SET)
else()
message(STATUS "MY_OPTION is not enabled, so required variables are not set")
endif()
if (MY_OPTION_REQUIRED)
message(STATUS "All required variables for MY_OPTION are set")
else()
message(ERROR "Some required variables for MY_OPTION are not set")
endif()
説明
MY_OPTION
オプションが有効化されていない場合、このコマンドは警告メッセージを表示します。- この例では、
if()
ステートメントとset()
コマンドを使用して、MY_OPTION
オプションが有効化されている場合に、MY_OPTION_REQUIRED
変数がTRUE
に設定され、MY_OPTION_VARIABLE1
とMY_OPTION_VARIABLE2
変数が設定されていることを確認します。
代替方法 2:check_variable()
コマンドを使用する
option(MY_OPTION "Enable my option" OFF)
check_variable(MY_OPTION_VARIABLE1 REQUIRED)
check_variable(MY_OPTION_VARIABLE2 REQUIRED)
if (MY_OPTION)
message(STATUS "All required variables for MY_OPTION are set")
else()
message(STATUS "MY_OPTION is not enabled, so required variables are not checked")
endif()
説明
MY_OPTION
オプションが有効化されていない場合、このコマンドは何も実行しません。MY_OPTION
オプションが有効化されている場合、このコマンドはMY_OPTION_REQUIRED
変数がTRUE
に設定されていることを確認します。- この例では、
check_variable()
コマンドを使用して、MY_OPTION_VARIABLE1
とMY_OPTION_VARIABLE2
変数が設定されていることを確認します。
代替方法 3:カスタム関数を使用する
function(my_option_check)
option(MY_OPTION "Enable my option" OFF)
if (MY_OPTION)
set(MY_OPTION_REQUIRED TRUE)
check_variable(MY_OPTION_VARIABLE1 REQUIRED)
check_variable(MY_OPTION_VARIABLE2 REQUIRED)
else()
message(STATUS "MY_OPTION is not enabled, so required variables are not checked")
endif()
if (MY_OPTION_REQUIRED)
message(STATUS "All required variables for MY_OPTION are set")
else()
message(ERROR "Some required variables for MY_OPTION are not set")
endif()
endfunction()
my_option_check()
説明
my_option_check
関数は、CMakeLists.txt
ファイル内の任意の場所から呼び出すことができます。- この例では、
my_option_check
関数を使用して、MY_OPTION
オプションと必要な変数の関係を記述します。
variable_requires()
コマンドは、CMake プロジェクトにおいて、特定のオプションが有効化されている場合に、必要な変数が設定されていることを確認するために便利なコマンドです。しかし、このコマンドにはいくつかの制限があります。これらの制限を回避するために、if()
ステートメントと set()
コマンド、check_variable()
コマンド、カスタム関数を使用するなどの代替方法があります。
- [CMake check_variable command