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

ナビゲーションに移動 検索に移動
678行目: 678行目:
  endforeach()
  endforeach()
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
== 条件分岐 ==
if()コマンドおよびelseif()コマンドの引数には、そのブロックを実行する条件式を記述する。<br>
この条件式には、以下に示す種類がある。<br>
<br>
* ブール定数
*: CMakeの値は全て文字列型であるが、条件式では以下に示す値がBooleanとして認識される。
*: <u>これらの値は、大文字・小文字は区別されないことに注意する。</u>
<br>
==== 真と解釈される値 ====
* 0でない数値
* ON
* YES
* TRUE
* Y
# 例
if(1)
if(TRUE)
if(on)
if(Yes)
<br>
==== 偽と解釈される値 ====
* 空文字列
* 0
* OFF
* NO
* FALSE
* N
* IGNORE
* NOTFOUND
* 末尾が<code>-NOTFOUND</code>である文字列
<br>
# 例
if(0)
if(FALSE)
if(off)
if(No)
if(SamplePackage-NotFound)
<br>
==== ブール演算子 ====
論理積を表すAND、論理和を表すOR、否定を表すNOTが使用できる。<br>
<u>これらは、全て大文字でなければならないことに注意する。</u>
# 例
if(true AND true)
if(true OR false)
if(NOT false)
<br>
==== 定義済み変数の確認と比較 ====
変数が定義済みかどうかの確認、および、数値の比較等を行うことができる。<br>
# 例
if(DEFINED variable)
if(1 LESS 2)
<br>
* 対象の存在の確認
*: 対象の存在を判定することができる。
# 例
if(DEFINED value)    # value という変数がセットされているかどうか
if(COMMAND message)  # message というコマンドが存在するかどうか
if(POLICY CMP0011)  # CMP0011 というポリシーが存在するかどうか
if(TARGET test)      # test というターゲットが定義されているかどうか
if(EXISTS src/a.cpp) # src/a.cpp というパスが存在しているかどうか
<br>
* 対象の性質の確認
*: 対象の性質を確認することができる。
# 例
if(IS_DIRECTORY src/)  # src/ がディレクトリかどうか
if(IS_SYMLINK /bin/sh) # /bin/sh がシンボリックリンクかどうか
if(IS_ABSOLUTE /)      # / が絶対パスかどうか
<br>
* 文字列のパターンマッチ
*: <code><文字列> MATCHES <正規表現のパターン></code>
*: 文字列正規表現のパターンにマッチするかどうかを確認することができる。
*: もし、文字列が空文字列、または、存在しない場合は、<code>false</code>を返す。
# 例
# 文字列がa(1文字以上)から始まり、aの次がbで終わる場合
if("aaaab" MATCHES "^a+b$")
<br>
* 数値の比較
*: 数値の比較することができる。
# 例
if(1 EQUAL 1)
if(1 LESS 2)
if(2 GREATER 1)
<br>
* 文字列の比較
*: 文字列を比較することができる。
*: 辞書順に基づく。
# 例
if("a" STREQUAL "a")  # 文字列が同じ
if("a" STRLESS "aa")  # "a" < "aa"
if("b" STRGREATER "a") # "b" > "a"
<br><br>
<br><br>


案内メニュー