<<現代CMakeの>>翻訳・キャッシュ変数2.1

<<現代CMakeの>>翻訳・キャッシュ変数2.1

ローカル変数

私たちは、最初の変数を見てください。次のようにローカル変数は、通常設定されます。

set(MY_VARIABLE "value")

変数の名前は、一般的に、変数の値を続け、すべて大文字で使用されます。あなたは使用することができ  ${} 、たとえば、取得する変数の値を${MY_VARIABLE}。1つの  限り、あなたは、変数の値にアクセスすることができますと同じ範囲で変数を設定した後:持つの概念のcmakeの範囲。機能またはサブディレクトリ内のファイルを残して、変数が消えました。あなたはでき  PARENT_SCOPE 尾は子スコープの変数を設定します。

あなたは、リストを形成するために複数の値を設定することができます。

set(MY_LIST "one" "two")

これは、複数の値を使用することと等価である。離れ。したがって、上記と同じ効果と次の文:

set(MY_LIST "one;two")

list( コマンドがリストを処理するためのいくつかの実用的な方法があり、separate_arguments スペースで区切られたリストの文字列に変換することができます(直接の変数値を変更します)。スペースがない場合は、CMakeのを注意してください、値は引用符で囲むことはできません。これは、値を引用符で置くことができないほとんどの時間をことができます。

使用  ${} ルールは同じスペースであるため、変数の構文拡張を。ファイルやディレクトリのパスの取り扱いは特に注意してください。彼らは常に引用符で囲む必要があるときにパスが(つまり変数がとき、書くことはありませんので、いつでもスペースを含む可能性があるため${MY_PATH}、必ず記述する必要があります"${MY_PATH}")。

キャッシュ変数

コマンドラインから変数を設定したい場合は、CMakeのは、変数のキャッシュを提供します。いくつかの変数は、例えば、構築されていますCMAKE_BUILD_TYPE次のように、この変数は(コマンドライン)が設けられていない場合、変数の値が設定されている構文は次のとおりです。

set(MY_CACHE_VARIABLE "VALUE" CACHE STRING "Description")

これは、コマンドラインでそれらを設定することができるように、変数の値が設定されていた置き換えることはありません、あなたはCMakeのファイルを実行したときに上書きされることはありません。あなたはグローバル変数としてこれらの変数が必要な場合は、次のように書くことができます。

set(MY_CACHE_VARIABLE "VALUE" CACHE STRING "" FORCE)
mark_as_advanced(MY_CACHE_VARIABLE) 

変数にどのような場合のリードの最初の行が設定されています。あなたが実行して第二の運動  cmake -L ..または使用は  GUI、変数がリストに表示されません。これは非常に一般的ですので、あなたが使用することができます  INTERNAL (技術的には、STRINGタイプのために必須ですが、変数に依存いかなるCMakeのコードには影響しませんが)同じ効果を達成するためのタイプ:

set(MY_CACHE_VARIABLE "VALUE" CACHE INTERNAL "")

以来  BOOL 種類は非常に一般的です、あなたも使用することができます  option 簡潔にそれを設定するためのコマンドを:

 option(MY_OPTION "This is settable from the command line" OFF)

以下のための  BOOL データ型の値  ON と  OFF、いくつかの異なるコンテキストインチ

CMake 変数の組み込みのリストを参照してください  cmakeの-変数

環境変数

また、使用することができ  set(ENV{variable_name} value) て、セットを  $ENV{variable_name} 環境変数の値が、それは、環境変数を回避することが最善です。

キャッシュ

キャッシュは、実際にはテキストファイルですCMakeCache.txtこのファイルは、ビルドディレクトリcmakeの実行時に作成されます。これはcmakeのは、あなたが設定され何も覚えての方法ですので、あなたは、これらのオプションの列(コマンドラインで)あなたはCMakeのを再実行するたびに再する必要はありません。

プロパティ

もう一つの方法は、情報保存CMakeのプロパティを使用することです。これは変数に似ていますが、それだけでそのようなディレクトリまたはターゲットとして他のエントリに取り付けることができます。グローバル属性は非キャッシュされたグローバル変数として使用することができます。ターゲットからの多くの属性  CMAKE_ の初期化位相整合変数の先頭から。たとえば、設定が  CMAKE_CXX_STANDARD 新しいターゲットがされたときに、すべてが作成されていることを意味  CXX_STANDARD する設定  CMAKE_CXX_STANDARD 変数の値。プロパティを設定する方法は2つあります。

set_property(TARGET TargetName
             PROPERTY CXX_STANDARD 11)

set_target_properties(TargetName PROPERTIES
                      CXX_STANDARD 11)

最初のフォームは、より一般的であり、一回以上の宛先/ファイル/テストを設定し、有用な選択肢を提供することができます。二つ目は、ターゲットショートカットの複数の属性に配置されています。あなたは、この目的のプロパティを取得することができます。

get_property(ResultVariable TARGET TargetName PROPERTY CXX_STANDARD)

すべての組み込みのプロパティのリストを参照してください  cmakeの-プロパティをいくつかのケースでは、あなたはまた、独自の属性を定義することができます。2

1.  if  少し奇妙な文で、それはよく、または変数を取得するための構文をブラケティングされていない可能性があるため、これは歴史的な原因である: if 表示される  ${}  文法の出現の前に。  ↩
2.例えば、 Interface  ターゲットは、カスタムプロパティを可能にするいくつかの制限があります。  ↩

おすすめ

転載: www.cnblogs.com/hejiang/p/11247678.html