「CMake - 条件分岐」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「== 概要 == <code>if()</code>コマンドおよび<code>elseif()</code>コマンドの引数には、そのブロックを実行する条件式を記述する。<br> この条件式には、以下に示す種類がある。<br> <br> * ブール定数 *: CMakeの値は全て文字列型であるが、条件式では以下に示す値がBooleanとして認識される。 *: <u>これらの値は、大文字・小文字は区別されないことに注意する。</u>…」) |
細 (文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…) |
||
(同じ利用者による、間の1版が非表示) | |||
122行目: | 122行目: | ||
<br><br> | <br><br> | ||
== その他の条件分岐 == | |||
==== OSでの分岐 ==== | |||
Linuxのみビルドを可能にする場合は、条件分岐により現在のプラットフォームがLinuxであるかどうかを確認する。<br> | |||
<br> | |||
LinuxおよびMacOS以外のUNIX系OSは含まれないため、CMake変数<code>CMAKE_SYSTEM_NAME</code>を使用してより詳細な条件を設定することもできる。<br> | |||
<syntaxhighlight lang="cmake"> | |||
# OSの確認 | |||
if(UNIX AND NOT APPLE) | |||
# Linuxの場合 | |||
message("Linux detected. Proceeding with CMake configuration...") | |||
else() | |||
# Linux以外の場合 | |||
message(FATAL_ERROR "This project requires Linux to build.") | |||
endif() | |||
</syntaxhighlight> | |||
<br><br> | |||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:C]][[カテゴリ:C++]][[カテゴリ:Qt]] | [[カテゴリ:C]][[カテゴリ:C++]][[カテゴリ:Qt]] |
2024年10月14日 (月) 10:39時点における最新版
概要
if()
コマンドおよびelseif()
コマンドの引数には、そのブロックを実行する条件式を記述する。
この条件式には、以下に示す種類がある。
- ブール定数
- CMakeの値は全て文字列型であるが、条件式では以下に示す値がBooleanとして認識される。
- これらの値は、大文字・小文字は区別されないことに注意する。
真と解釈される値
- 0でない数値
- ON
- YES
- TRUE
- Y
# 例 if(1) if(TRUE) if(on) if(Yes)
偽と解釈される値
- 空文字列
- 0
- OFF
- NO
- FALSE
- N
- IGNORE
- NOTFOUND
- 末尾が
-NOTFOUND
である文字列
# 例 if(0) if(FALSE) if(off) if(No) if(SamplePackage-NotFound)
ブール演算子
論理積を表すAND、論理和を表すOR、否定を表すNOTが使用できる。
これらは、全て大文字でなければならないことに注意する。
# 例 if(true AND true) if(true OR false) if(NOT false)
変数の確認
変数が定義済みかどうかの確認、および、数値の比較等を行うことができる。
# 例 if(DEFINED variable) if(1 LESS 2)
- 対象の存在の確認
- 対象の存在を判定することができる。
# 例 if(DEFINED value) # value という変数がセットされているかどうか if(COMMAND message) # message というコマンドが存在するかどうか if(POLICY CMP0011) # CMP0011 というポリシーが存在するかどうか if(TARGET test) # test というターゲットが定義されているかどうか if(EXISTS src/a.cpp) # src/a.cpp というパスが存在しているかどうか
- 対象の性質の確認
- 対象の性質を確認することができる。
# 例 if(IS_DIRECTORY src/) # src/ がディレクトリかどうか if(IS_SYMLINK /bin/sh) # /bin/sh がシンボリックリンクかどうか if(IS_ABSOLUTE /) # / が絶対パスかどうか
数値の比較
- 数値の比較
- 数値の比較することができる。
# 例 if(1 EQUAL 1) if(1 LESS 2) if(2 GREATER 1)
文字列の比較
- 文字列の比較
- 文字列を比較することができる。
- 辞書順に基づく。
# 例 if("a" STREQUAL "a") # 文字列が同じ if("a" STRLESS "aa") # "a" < "aa" if("b" STRGREATER "a") # "b" > "a"
- 文字列のパターンマッチ
<文字列> MATCHES <正規表現のパターン>
- 文字列正規表現のパターンにマッチするかどうかを確認することができる。
- もし、文字列が空文字列、または、存在しない場合は、
false
を返す。
# 例 # 文字列がa(1文字以上)から始まり、aの次がbで終わる場合 if("aaaab" MATCHES "^a+b$")
バージョンの比較
バージョンのフォーマットは、<メジャー>[.<マイナー>[.<パッチ>[.<ビルド>]]]である。
バージョンの比較では、以下に示すような特徴がある。
- 数値的な順序や辞書順には基づかない。
例えば、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
ファイルのタイムスタンプを比較することができる。
- ファイル1とファイル2のタイムスタンプを比較することができる。
- ファイル1がファイル2より新しい場合、
true
を返す。 - いずれかのファイルが存在しない場合も、
true
を返す。
# 例
if(build/my_exe IS_NEWER_THAN /usr/local/bin/my_exe)
その他の条件分岐
OSでの分岐
Linuxのみビルドを可能にする場合は、条件分岐により現在のプラットフォームがLinuxであるかどうかを確認する。
LinuxおよびMacOS以外のUNIX系OSは含まれないため、CMake変数CMAKE_SYSTEM_NAME
を使用してより詳細な条件を設定することもできる。
# OSの確認
if(UNIX AND NOT APPLE)
# Linuxの場合
message("Linux detected. Proceeding with CMake configuration...")
else()
# Linux以外の場合
message(FATAL_ERROR "This project requires Linux to build.")
endif()