ビルドプロセスの一部をテストに合格させようとしています。cmake:ビルドプロセスの一部を正常にテストします。
ここではadd_custom_command
を使用してテストをPOST_BUILD
ステップとして実行します。
function(register_test NAME)
add_test(${NAME} ${NAME})
# make the test run as part of the build process
add_custom_command(TARGET ${NAME} POST_BUILD COMMAND ${NAME})
endfunction()
このアプローチの問題は、ターゲットがを構築するときテストにのみ実行されていることである。
$ make
[ 50%] Built target lib1 Linking CXX executable ../../Debug/bin/lib1_test Running 1 test case... main.cpp(8): fatal error: in "lib1_test": critical check lib1() == "lib1" has failed [error != lib1] *** 1 failure is detected in the test module "Master Test Suite" make[2]: *** [lib1/test/lib1_test] Error 201 make[1]: *** [lib1/test/CMakeFiles/lib1_test.dir/all] Error 2 make: *** [all] Error 2
ターゲットはする必要がない場合ビルドされると、テストは実行されず、ビルドがパスします。ここで
私は変更しないで、ただ
$ make
[ 50%] Built target lib1 [100%] Built target lib1_test
ビルドプロセスを再実行しlib1_test
が実際に実行された場合は、テストは失敗します。
$ ./lib1/test/lib1_test
Running 1 test case... main.cpp(8): fatal error: in "lib1_test": critical check lib1() == "lib1" has failed [error != lib1] *** 1 failure is detected in the test module "Master Test Suite"
lib1_test
に依存lib1_test.passed
ターゲットを作ることになり、これを行うには良い方法
を私はlib1_test
に依存ターゲットlib1_test.passed
を作成するadd_custom_target
を使用してみましたが、成功した場合、ファイルlib1_test.passed
作成します:
add_custom_target(${NAME}.passed
DEPENDS ${NAME}
COMMAND ${NAME}
COMMAND ${CMAKE_COMMAND} -E touch ${NAME}.passed)
を2人の不足がありますが、私が試してみました何
私が現在達成しているもの:
- テストの実行は通常のビルドプロセスの一部ではありません。
つまり、make
はではありません。 "build"lib1_test.passed
です。
私は明示的にmake lib1_test.passed
make lib1_test.passed
は関係なく、常にlib1_test.passed
がlib1_test1
か
質問よりも新しいかどうかの、lib1_test
を実行します述べることがあります。
がどのようにテストの一部の実行を行うことができます失敗したテストは常に再実行されます。
をあなたの願いを取得しない、あなたも 'lib1_test'を実行したいです変更されていない場合は?異なる入力データを取得するか、変更されていない場合はなぜ再実行する必要があるのですか? – fghj
これと反対ではありません - 'lib1_test'を' make'の一部として実行し、 'make'をもう一度入力すると**テストは実行されません。しかし、失敗した場合は、 'make'をもう一度入力すると**テストを再実行する必要があります。 –
次に、バイナリファイル 'lib1_test'に依存する' add_custom_target'が必要で、失敗した場合はこのバイナリ(実行ファイル)ファイルを削除してください。 – fghj