|
|
| 326行目: |
326行目: |
| <br> | | <br> |
| qmakeもCMakeも制御構文を持ち複雑なプロジェクトの作成も可能であるが、プロジェクトでの採用検討という視点から将来性も含めて考慮した場合、CMakeの方が有力である。<br> | | qmakeもCMakeも制御構文を持ち複雑なプロジェクトの作成も可能であるが、プロジェクトでの採用検討という視点から将来性も含めて考慮した場合、CMakeの方が有力である。<br> |
| <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>
| |
| ==== 数値および文字列等の比較 ====
| |
| * 数値の比較
| |
| *: 数値の比較することができる。
| |
| # 例
| |
| if(1 EQUAL 1)
| |
| if(1 LESS 2)
| |
| if(2 GREATER 1)
| |
| <br>
| |
| * 文字列のパターンマッチ
| |
| *: <code><文字列> MATCHES <正規表現のパターン></code>
| |
| *: 文字列正規表現のパターンにマッチするかどうかを確認することができる。
| |
| *: もし、文字列が空文字列、または、存在しない場合は、<code>false</code>を返す。
| |
| # 例
| |
| # 文字列がa(1文字以上)から始まり、aの次がbで終わる場合
| |
| if("aaaab" MATCHES "^a+b$")
| |
| <br>
| |
| * 文字列の比較
| |
| *: 文字列を比較することができる。
| |
| *: 辞書順に基づく。
| |
| # 例
| |
| if("a" STREQUAL "a") # 文字列が同じ
| |
| if("a" STRLESS "aa") # "a" < "aa"
| |
| if("b" STRGREATER "a") # "b" > "a"
| |
| <br>
| |
| * バージョンを比較
| |
| *: バージョンを比較することができる。
| |
| *: バージョンのフォーマットは、<メジャー>[.<マイナー>[.<パッチ>[.<ビルド>]]]である。
| |
| *: 数値的な順序や辞書順には基づかない。
| |
| *: 例えば、0.1という値と0.1.0.0という値は等しいと評価される。
| |
| *: また、1.19は、1.2より大きいと評価される。
| |
| # 例
| |
| if(0.1 VERSION_EQUAL 0.1.0.0) # 0.1 == 0.1.0.0
| |
| if(0.1 VERSION_LESS 0.1.1) # 0.1 < 0.1.1
| |
| if(1.19 VERSION_GREATER 1.2) # 1.19 > 1.2
| |
| <br>
| |
| * ファイルのタイムスタンプの比較
| |
| *: ファイル1とファイル2のタイムスタンプを比較することができる。
| |
| *: ファイル1がファイル2より新しい場合、<code>true</code>を返す。
| |
| *: また、いずれかのファイルが存在しない場合も、<code>true</code>を返す。
| |
| # 例
| |
| if(build/my_exe IS_NEWER_THAN /usr/local/bin/my_exe)
| |
| <br><br> | | <br><br> |
|
| |
|