CMakeでCTestを使うときに最初に設定しておくべきこと
CMakeでテストを動かす場合、最初に見るのは enable_testing() と add_test() です。
テストフレームワークを入れる前でも、実行ファイルを1つ作って ctest から呼ぶところまでは確認できます。まずこの形にしておくと、あとからGoogleTestなどを足すときも流れを崩しにくいです。
最小構成
my_project/
├── CMakeLists.txt
└── tests/
├── CMakeLists.txt
└── sample_test.cpp
ルート側ではテストを有効にして、tests を追加します。
cmake_minimum_required(VERSION 3.20)
project(MyProject LANGUAGES CXX)
enable_testing()
add_subdirectory(tests)
enable_testing() は、そのディレクトリ以下でCTestを使うための設定です。
https://cmake.org/cmake/help/latest/command/enable_testing.html
tests側のCMakeLists.txt
add_executable(sample_test
sample_test.cpp
)
add_test(
NAME sample_test
COMMAND sample_test
)
add_test() で、CTestから実行するテスト名とコマンドを登録します。
https://cmake.org/cmake/help/latest/command/add_test.html
最初はこのくらいで十分です。sample_test が終了コード 0 を返せば成功、それ以外なら失敗として扱われます。
テストコード
int main() {
return 0;
}
実際のプロジェクトならここに検証を書きます。まだテストフレームワークを入れていない段階では、終了コードで成否を見るだけでも流れを確認できます。
実行方法
cmake -S . -B build
cmake --build build
ctest --test-dir build
ビルドディレクトリへ移動してから実行するなら、次でも動きます。
cd build
ctest
CIでは ctest --test-dir build --output-on-failure のようにしておくと、失敗時のログが追いやすいです。
GoogleTestを入れる前に見ること
GoogleTestを入れる場合でも、先にCTestの登録だけ確認しておくと切り分けが楽です。
- テスト実行ファイルがビルドされているか
ctest -Nでテスト一覧に出るか- 失敗時に終了コードが非0になっているか
ctest -N は実行せずにテスト一覧だけ出します。
ctest --test-dir build -N
まとめ
CMakeでテストを動かす最初の設定は、この3つです。
- ルートで
enable_testing()を呼ぶ - テスト用の実行ファイルを作る
add_test()でCTestに登録する
テストフレームワークを入れる前に、CTestから実行できる状態を作っておくと後が楽です。


