6

CMake を使用して、一連の実行可能ファイルをビルドし、次のようにテストとして追加しました。

set(TestID 1)
add_executable (Test${TestID} Test${TestID}.cpp)

# Create test
configure_file(${TestID}.endf ${TestID}.endf COPYONLY)
add_test( NAME ${TestID} COMMAND Test${TestID} )

これで問題なく動作します。実行可能ファイルが作成され、テストが正しく追加されます。allただし、テスト実行可能ファイルをターゲットに追加したくありません。

テストを他のすべてのものと一緒にビルドするのではなく、テストを実行する直前にビルドしたいと思います。の一部として、make testまたは一部としてctest

これどうやってするの?

4

1 に答える 1

7

テスト実行可能ターゲットの作成時にフラグを設定してEXCLUDE_FROM_ALL、ターゲットをターゲットから除外しますall

add_executable (Test${TestID} EXCLUDE_FROM_ALL Test${TestID}.cpp)

テストの実行前にテスト ターゲットがビルドされていることを確認するのは、さらに注意が必要です。testを使用して組み込みターゲットに依存関係を追加することはできませんadd_dependencies。これは、ターゲットが、作成されたビルド システムにのみ存在する予約済みターゲット ( やその他のいくつかのターゲットなど)のtestグループに属しているためです。allclean

回避策として、 TEST_INCLUDE_FILESディレクトリ プロパティを使用して、テストが実行される前に必要なテスト実行可能ファイルのビルドをトリガーできます。BuildTestTargets.cmake.inソース ディレクトリに次の内容のファイルを作成します。

execute_process(COMMAND "@CMAKE_COMMAND@" --build . --target Test1)
execute_process(COMMAND "@CMAKE_COMMAND@" --build . --target Test2)

次に、次のコードを に追加しますCMakeLists.txt

configure_file("BuildTestTargets.cmake.in" "BuildTestTargets.cmake")
set_directory_properties(PROPERTIES TEST_INCLUDE_FILES
    "${CMAKE_CURRENT_BINARY_DIR}/BuildTestTargets.cmake")

CTest はBuildTestTargets.cmake、テストが実行される前の最初のステップとしてファイルを含めて実行します。

于 2015-05-08T18:00:51.540 に答える