前回はCMake【チュートリアル2】で複数のファイルの扱い方について解説しました
しかし、全部手書きしていては手間がかかって仕方ない事も多々あると思います
今回はCMakeで変数・ループ・デバッグの仕方について解説していこうと思います
ソースコードはgithubからダウンロード/cloneしてください
チュートリアル3
CMakeでの変数の使い方やデバッグプリントの仕方などについて解説していきます
今回は、冗長ですがCMakeの使い方を説明するため、四則演算の関数を全て別のファイルに分けています
tutorial_3/CMakeLists.txtを開いてください
前回より少し複雑になっています
変数
CMakeで変数に値を代入するにはset
を使用します
CMakeでは変数の型がないので内部的には文字列になります
変数の種類は値・文字列・BOOLの3種類があります
set(VAR_VALUE 1)
set(VAR_STR "文字列")
set(VAR_BOOL ON)
デバッグ
CMakeで変数のデバッグをするにはmessage
を使用します
""
で囲んだ文字列の中でも${変数名}
とすれば出力できます
また、STATUS
の他にもいくつかのオプションが存在する
これについては別のセクションで解説予定
message(STATUS "VAR_VALUE=${VAR_VALUE}")
message(STATUS "VAR_STR=${VAR_STR}")
message(STATUS "VAR_BOOL=${VAR_BOOL}")
環境変数
CMakeでシステム環境変数を取得するには$ENV{環境変数名}
を使用する
下記の例は環境変数PATH
を出力する
message(STATUS "PATH=$ENV{PATH})")
変数の外部入力
CMakeを実行する時に-D 変数名=値・文字列
を付けて実行すると外部から変数に値を代入できます
例)
cmake -S tutorial_3 -B build/tutorial_3 -D VAR_FLAG=ON
分岐
分岐文は以下のように記述します
if(分岐条件1)
処理1
else if(分岐条件2)
処理2
else()
処理3
endif()
tutorial_3/CMakeLists.txtの分岐例は以下のようになっています
変数VAR_FLAG
をcmake実行時にON/OFFを代入することで通る分岐が変わります
if(VAR_FLAG)
message(STATUS "VAR_FLAG is TRUE")
else()
message(STATUS "VAR_FLAG is FALSE")
endif()
ファイル・リスト
ファイルのリストを1つの変数に代入できます
下記の例ではtutorial_3/srcフォルダの中のソースコードを変数SOURCES
に代入しています
また、*
はワイルドカード、${CMAKE_CURRENT_SOURCE_DIR}
は予約語です
${CMAKE_CURRENT_SOURCE_DIR}
は現在のCMakeLists.txtがあるディレクトリを指します
file(GLOB_RECURSE SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/src/*.c
${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc
${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/*.cxx)
ループ
ループ文は以下のように記述します
${SOURCES}
にはadd.cc, sub.cc, mul.cc, div.ccが代入されているので4回ループします
順番にファイル名が変数file
に代入されます
foreach(file ${SOURCES})
message(STATUS ${file})
endforeach()
プロジェクトへの一括追加
add_executable(${PROJECT_NAME} ${SOURCES})
で変数${SOURCES}に入力したファイルをプロジェクトに一括追加することができます
add_executable(${PROJECT_NAME} ${SOURCES})
target_include_directories(${PROJECT_NAME} PRIVATE include)
ビルド
cd cmake_tutorials
cmake -S tutorial_3 -B build/tutorial_3 -D VAR_FLAG=ON
cmake --build build/tutorial_3
実行
- Windows
build\tutorial_3\Debug\cmake_tutorial_3.exe
- Mac/Linux
build/tutorial_3/cmake_tutorial_3
出力結果
5 + 3 = 8
10 - 7 = 3
3 * 8 = 24.000000
13 / 3 = 4.333333
CMakeの変数・環境変数・分岐・ループについて解説しました
複雑な構文など全部網羅は仕切れないですが色んなOSS等も見てみると参考になると思います
CMakeの予約語についてはこちらを参考にしてください
次回はライブラリの作成と複数プロジェクトについて解説していこうと思います