「Qtの設定 - CMake」の版間の差分

ナビゲーションに移動 検索に移動
438行目: 438行目:
<br>
<br>
qmakeもCMakeも制御構文を持ち複雑なプロジェクトの作成も可能であるが、プロジェクトでの採用検討という視点から将来性も含めて考慮した場合、CMakeの方が有力である。<br>
qmakeもCMakeも制御構文を持ち複雑なプロジェクトの作成も可能であるが、プロジェクトでの採用検討という視点から将来性も含めて考慮した場合、CMakeの方が有力である。<br>
<br><br>
== 変数 ==
==== 変数の宣言と代入 ====
変数は、<code>set</code>コマンドを使用して、変数を宣言および代入することができる。<br>
CMakeでは、全ての変数を文字列として扱っており、変数名には、英数字、<code>_</code>、<code>.</code>、<code>/</code>、<code>-</code>、<code>+</code>を含めることができる。<br>
また、大文字と小文字が区別される。<br>
<br>
変数の値を代入する時、値にスペースが含まれていない限り、引用符で囲む必要はない。<br>
<syntaxhighlight lang="cmake">
set(value 1)  # 値が1の変数valueを宣言
</syntaxhighlight>
<br>
既存の変数への代入も<code>set</code>コマンドを使用する。<br>
変数の値の参照は、入れ子にすることもできる。<br>
<syntaxhighlight lang="cmake">
set(value 1)  # 値が1の変数valueを生成
set(value 2)  # 既存の変数valueに値1を代入
set(value_name value)  # 変数value_nameに変数valueの値を代入
message(${${value_name}}) # ${value_name}が展開されて、${${value_name}}が${value}になり、これが展開されて2になる
</syntaxhighlight>
<br>
1つの変数に複数の値を指定する場合、各値はセミコロンで区切って結合される。(<u>文字列リストとして代入される</u>)<br>
また、未定義の変数を参照する場合は、空の文字列となる。<br>
<syntaxhighlight lang="cmake">
set(myVar a b c)    # myVarの値: a;b;c
set(myVar a;b;c)    # myVarの値: a;b;c
set(myVar "a b c")  # myVarの値: a b c
set(myVar a b;c)    # myVarの値: a;b;c
set(myVar a "b c")  # myVarの値: a;b c
</syntaxhighlight>
<br>
<syntaxhighlight lang="cmake">
set(USE_CCACHE OFF CACHE BOOL "")
</syntaxhighlight>
<br>
==== 変数の削除 ====
変数の削除する場合は、<code>unset</code>コマンドを使用する。<br>
<syntaxhighlight lang="cmake">
set(value 1)  # 変数valueを宣言
unset(value)  # 変数valueを削除
</syntaxhighlight>
<br>
==== キャッシュ変数 ====
キャッシュ変数とは、ビルドディレクトリのCMakeCache.txtに記録される変数のことである。<br>
グローバルスコープで参照可能であり、生存期間が<code>cmake</code>コマンドの終了後も継続する。<br>
<br>
次の<code>cmake</code>コマンドの実行でも値を保つため、生成したビルドの構成情報を保存するような用途にも使用される。<br>
<br>
例えば、キャッシュ変数VAR1の値は$CHACHE{VAR1}で参照できる。<br>
同名の通常変数が存在しない場合は、${VAR1}でも参照することができる。<br>
<br>
<code>set(CACHE)</code>コマンドで初回の変数が定義ができる。<br>
<br>
既に定義されているキャッシュ変数を変更する場合は、<code>FORCE</code>オプションが必要である。<br>
指定されていない場合、<code>set(CACHE)</code>コマンドは無視される。<br>
また、<code>cmake</code>コマンドの実行時に<code>-D<オプション名></code>でも定義や変更が可能である。<br>
<br>
他の変数と異なり、キャッシュ変数は型を持つ。<br>
<code>cmake</code>コマンドの<code>-D<オプション名></code>オプションで型を指定せずに定義することにより、型のない状態で使用することもできる。<br>
この場合、<code>set(CACHE)</code>コマンドを実行した時点で型が確定する。<br>
<br>
==== リスト(配列) ====
変数は全て文字列として扱われるが、複数の変数をまとめて扱う場合はリストを使用する。<br>
これは、複数の文字列をセミコロン<code>;</code>で連結したものである。<br>
<br>
リストという型は無く文字列であるが、関数の引数が暗黙的に連結されてリストとして扱うことができ、操作関数により言語レベルでのサポートがあるため、<br>
不定個数の変数をまとめて扱う場合に便利である。<br>
<br>
<syntaxhighlight lang="cmake">
set(LIST1 "AA" "BB" "CC") # 3つの文字列からなるリストを作成
message("${LIST1}")      # -> AA;BB;CC
list(APPEND LIST1 "DD")  # リスト末尾に要素を追加
message("${LIST1}")      # -> AA;BB;CC;DD
list(LENGTH LIST1 LEN)    # リスト要素の個数を取得
message("${LEN}")        # -> 4
list(GET LIST1 2 ITEM)    # 2番目の要素を取得
message("${ITEM}")        # -> CC
</syntaxhighlight>
<br>
==== 定義された全ての変数を出力 ====
<syntaxhighlight lang="cmake">
get_cmake_property(variableNames VARIABLES)
foreach(variableName ${variableNames})
    message(STATUS "${variableName}=${${variableName}}")
endforeach()
</syntaxhighlight>
<br><br>
<br><br>


案内メニュー