13,044
回編集
| 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> | ||