私のCMakeベースのプロジェクトでは、私は自分のCMakeLists.txtにバックエンドを対象にする変数を持っています。この変数の有効な値は、たとえば6と制限されています。有効な値が限定されたCMake変数
ユーザーが有効にする機能を選択できるように、有効な値のリストをキャッシュします。 CMakeは変数を検証する必要があります。
これは可能ですか?その場合はどうですか?
私のCMakeベースのプロジェクトでは、私は自分のCMakeLists.txtにバックエンドを対象にする変数を持っています。この変数の有効な値は、たとえば6と制限されています。有効な値が限定されたCMake変数
ユーザーが有効にする機能を選択できるように、有効な値のリストをキャッシュします。 CMakeは変数を検証する必要があります。
これは可能ですか?その場合はどうですか?
許容値を検証する場合は、CMakeLists.txt
ファイルでそれを行う必要があります。ただし、CMakeの値をCMake GUIアプリケーション(およびccmakeのncursesベースの同等物)のSTRINGキャッシュ変数のコンボボックスとして表示することもできます。これを行うには、キャッシュ変数のSTRINGSプロパティーを設定します。例:この例で
set(trafficLightColors Red Orange Green)
set(trafficLight Green CACHE STRING "Status of something")
set_property(CACHE trafficLight PROPERTY STRINGS ${trafficLightColors})
、CMakeのGUIは、他の文字列変数のようtrafficLight
キャッシュ変数を示すだろうが、ユーザーではなく、一般的なテキストボックスの、それを編集し、それをクリックすると、あなたは思います項目Red
、Orange
、およびGreen
を含むコンボボックスを取得します。
これは100%信頼性の高い検証ではありませんが、GUIを使用している場合に有効な値のみを入力するのに役立ちます。コマンドラインでcmakeを使用している場合、キャッシュ変数を好きな値に設定することを止めるものは何もありません。だから私はあなたのユーザーを助けるためにSTRINGSのキャッシュ変数プロパティを使用することをお勧めしますが、検証も行います。上記の例のパターンを使用した場合は、既に有効な値のリストがあるので、検証は簡単です。たとえば、次のように
list(FIND trafficLightColors ${trafficLight} index)
if(index EQUAL -1)
message(FATAL_ERROR "trafficLight must be one of ${trafficLightColors}")
endif()
それとも、CMakeの3.5以降を使用している場合:
if(NOT trafficLight IN_LIST trafficLightColors)
message(FATAL_ERROR "trafficLight must be one of ${trafficLightColors}")
endif()
ニースの答えを!同じトピックに関するブログ記事はこちら:https://blog.kitware.com/constraining-values-with-comboboxes-in-cmake-cmake-gui/ – DLRdave