【保存版】CMake: CTest でテストを成功させるための変数設定ガイド - CTest_SOURCE_DIRECTORY を制する
CTEST_SOURCE_DIRECTORY の主な役割は以下のとおりです。
- テスト結果の報告書やダッシュボードに表示されるソースコードのパスを設定します。
- Ctestがテスト対象のソースコードを検索する場所を指定します。
CTEST_SOURCE_DIRECTORY の設定方法は以下のとおりです。
- ctest(1) ダッシュボードクライアントスクリプト内で設定する
set(CTEST_SOURCE_DIRECTORY "/path/to/source/directory")
- cmakeコマンドラインオプションで設定する
cmake -DCTEST_SOURCE_DIRECTORY="/path/to/source/directory" .
CTEST_SOURCE_DIRECTORY を設定しないと、Ctestは現在のワーキングディレクトリをソースディレクトリと仮定します。これは通常望ましい動作ではありません。 ソースディレクトリを明示的に設定することで、テスト対象のソースコードが確実に検出され、正しいパスで報告されるようにすることができます。
CTEST_SOURCE_DIRECTORY の使用例
set(CTEST_SOURCE_DIRECTORY "/path/to/source/directory")
ctest_start(Experimental)
この例では、CTEST_SOURCE_DIRECTORY
変数を /path/to/source/directory
に設定し、Ctestにテストを開始するように指示しています。 Ctestは /path/to/source/directory
ディレクトリ内のテストをすべて検出して実行し、結果を報告します。
CTEST_SOURCE_DIRECTORY は、Ctestダッシュボードクライアントスクリプトを使用する場合は必須の変数です。 この変数を設定することで、テスト対象のソースコードが確実に検出され、正しいパスで報告されるようにすることができます。
以下のコード例は、CTEST_SOURCE_DIRECTORY 変数を使用して、テスト対象のソースディレクトリを指定する方法を示しています。
cmake_minimum_required(VERSION 3.1)
project(MyProject)
add_executable(MyTest test/MyTest.cpp)
set(CTEST_SOURCE_DIRECTORY "/path/to/source/directory")
ctest_start(Experimental)
このコード例では、以下の操作が行われます。
- CMake の最小バージョンを 3.1 に設定します。
MyProject
という名前のプロジェクトを作成します。MyTest.cpp
ファイルからMyTest
という名前の実行可能ファイルを作成します。CTEST_SOURCE_DIRECTORY
変数を/path/to/source/directory
に設定します。- Ctest にテストを開始するように指示します。
Ctest は /path/to/source/directory
ディレクトリ内の MyTest
テストを実行し、結果を報告します。
# CMakeLists.txt
cmake_minimum_required(VERSION 3.1)
project(MyProject)
add_executable(MyTest test/MyTest.cpp)
set(CTEST_SOURCE_DIRECTORY "${CMAKE_SOURCE_DIR}")
ctest_start(Experimental)
この CMakeLists.txt ファイルは、以下の操作を行います。
- CMake の最小バージョンを 3.1 に設定します。
MyProject
という名前のプロジェクトを作成します。test/MyTest.cpp
ファイルからMyTest
という名前の実行可能ファイルを作成します。CTEST_SOURCE_DIRECTORY
変数をCMAKE_SOURCE_DIR
に設定します。 これにより、CTEST_SOURCE_DIRECTORY 変数がプロジェクトのソースディレクトリに設定されます。- Ctest にテストを開始するように指示します。
このコードをビルドするには、次のコマンドを実行します。
cmake .
make
ctest
このコマンドは、以下の操作を行います。
- CMake を使用して、プロジェクトをビルドするための必要な Makefile を生成します。
make
コマンドを使用して、プロジェクトをビルドします。ctest
コマンドを使用して、テストを実行します。
テストが成功すると、次の出力が表示されます。
100% tests passed
この出力は、すべてのテストが成功したことを示しています。
以下の MyTest.cpp
ファイルは、上記の CMakeLists.txt ファイルで使用されるテストコードです。
// test/MyTest.cpp
#include <gtest/gtest.h>
TEST(MyTest, BasicTest) {
EXPECT_EQ(1, 1);
}
このテストコードは、1 が 1 に等しいことを確認する基本的なテストです。
このコードをビルドしてテストするには、上記の指示に従ってください。
説明
以下は、このコード例で示されている重要なポイントです。
CTEST_SOURCE_DIRECTORY
変数を設定しないと、Ctest は現在のワーキングディレクトリをソースディレクトリと仮定します。CTEST_SOURCE_DIRECTORY
変数は、cmake コマンドラインオプションで設定できます。CTEST_SOURCE_DIRECTORY
変数は、ctest(1) ダッシュボードクライアントスクリプト内で設定できます。CTEST_SOURCE_DIRECTORY
変数は、テスト対象のソースディレクトリを指定します。CTEST_SOURCE_DIRECTORY
変数は、CMake の Ctest モジュールで使用される変数です。
CTEST_SOURCE_DIRECTORY の代替方法として、以下の方法があります。
- CTEST_CMAKE_ARGS 変数を使用する
CTEST_CMAKE_ARGS 変数は、Ctest コマンドラインに渡される引数を指定するために使用できます。この変数を使用して、-S オプションでソースディレクトリを指定することができます。 - ソースコードの場所を推測する
Ctest は、現在のワーキングディレクトリをソースディレクトリと仮定します。ソースコードが現在のワーキングディレクトリにある場合は、この方法で問題ありません。ただし、ソースコードが別の場所にある場合は、CTEST_SOURCE_DIRECTORY 変数を明示的に設定する必要があります。
set(CTEST_CMAKE_ARGS "-S /path/to/source/directory")
ctest_start(Experimental)
- CTestモジュールの CMake_ARGS メソッドを使用する
CTest モジュールの CMake_ARGS メソッドを使用して、Ctest コマンドラインに渡される引数を指定することができます。
ctest_configure()
ctest_target(MyTest)
ctest_memcheck(MyTest)
これらの代替方法は、状況に応じて使用できます。ただし、CTEST_SOURCE_DIRECTORY 変数を明示的に設定するのが最も一般的な方法です。
ソースコードの場所を推測する
利点
- 設定が不要
欠点
- ソースコードの場所が変更されると、テストが失敗する可能性がある
- ソースコードが現在のワーキングディレクトリにある場合にのみ機能する
CTEST_CMAKE_ARGS 変数を使用する
利点
- ソースコードの場所を明示的に指定できる
欠点
- CTEST_CMAKE_ARGS 変数の設定が必要
CTestモジュールの CMake_ARGS メソッドを使用する
利点
- Ctest の他の機能と組み合わせることができる
- ソースコードの場所を明示的に指定できる
欠点
- CTest モジュールの使用方法を理解する必要がある
CTEST_SOURCE_DIRECTORY 変数は、テスト対象のソースディレクトリを指定するための最も一般的な方法です。ただし、状況によっては、上記の代替方法を使用することもできます。