「CMake - 変数」の版間の差分
(ページの作成:「== 概要 == <br><br> == 変数の宣言と代入 == 変数は、<code>set</code>コマンドを使用して、変数を宣言および代入することができる。<br> CMakeでは、全ての変数を文字列として扱っており、変数名には、英数字、<code>_</code>、<code>.</code>、<code>/</code>、<code>-</code>、<code>+</code>を含めることができる。<br> また、大文字と小文字が区別される。<br> <br> 変数の値を…」) |
細 (文字列「__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…) |
||
118行目: | 118行目: | ||
<br><br> | <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時点における最新版
概要
変数の宣言と代入
変数は、set
コマンドを使用して、変数を宣言および代入することができる。
CMakeでは、全ての変数を文字列として扱っており、変数名には、英数字、_
、.
、/
、-
、+
を含めることができる。
また、大文字と小文字が区別される。
変数の値を代入する時、値にスペースが含まれていない限り、引用符で囲む必要はない。
set(value 1) # 値が1の変数valueを宣言
既存の変数への代入もset
コマンドを使用する。
変数の値の参照は、入れ子にすることもできる。
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になる
1つの変数に複数の値を指定する場合、各値はセミコロンで区切って結合される。(文字列リストとして代入される)
また、未定義の変数を参照する場合は、空の文字列となる。
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
set(USE_CCACHE OFF CACHE BOOL "")
変数の削除
変数の削除する場合は、unset
コマンドを使用する。
set(value 1) # 変数valueを宣言
unset(value) # 変数valueを削除
キャッシュ変数
キャッシュ変数とは、ビルドディレクトリのCMakeCache.txtに記録される変数のことである。
グローバルスコープで参照可能であり、生存期間がcmake
コマンドの終了後も継続する。
次のcmake
コマンドの実行でも値を保つため、生成したビルドの構成情報を保存するような用途にも使用される。
例えば、キャッシュ変数VAR1の値は$CHACHE{VAR1}で参照できる。
同名の通常変数が存在しない場合は、${VAR1}でも参照することができる。
set(CACHE)
コマンドで初回の変数が定義ができる。
既に定義されているキャッシュ変数を変更する場合は、FORCE
オプションが必要である。
指定されていない場合、set(CACHE)
コマンドは無視される。
また、cmake
コマンドの実行時に-D<オプション名>
でも定義や変更が可能である。
他の変数と異なり、キャッシュ変数は型を持つ。
cmake
コマンドの-D<オプション名>
オプションで型を指定せずに定義することにより、型のない状態で使用することもできる。
この場合、set(CACHE)
コマンドを実行した時点で型が確定する。
リスト(配列)
変数は全て文字列として扱われるが、複数の変数をまとめて扱う場合はリストを使用する。
これは、複数の文字列をセミコロン;
で連結したものである。
リストという型は無く文字列であるが、関数の引数が暗黙的に連結されてリストとして扱うことができ、操作関数により言語レベルでのサポートがあるため、
不定個数の変数をまとめて扱う場合に便利である。
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
定義された全ての変数を出力
get_cmake_property(variableNames VARIABLES)
foreach(variableName ${variableNames})
message(STATUS "${variableName}=${${variableName}}")
endforeach()
CMAKE_PREFIX_PATH
# ライブラリのインストールディレクトリを指定
## ライブラリのインストールディレクトリを1つ指定する場合
set(CMAKE_PREFIX_PATH "<ライブラリのパス>")
## ライブラリのインストールディレクトリを複数指定する場合
set(CMAKE_PREFIX_PATH "<ライブラリのパス 1>;<ライブラリのパス 2>;<ライブラリのパス 3>")
# find_packageコマンドを使用してライブラリを検索
find_package(<ライブラリ名> REQUIRED)
if(<ライブラリ名>_FOUND)
# ライブラリが見つかった場合
else()
# ライブラリが見つからなかった場合
endif()