プロジェクトが正常にビルドされるたびにテストを開始したいと思います。また、一部のテストが壊れている場合は、ビルドも壊れてほしいです。デフォルトでは、ctest
コマンドを実行して手動でテストを実行する必要があります。CTestは実際にプロジェクトをビルドできますがmake
、ソースをビルドするために呼び出すIDEを使用しています。そして、make
テストを実行しません。
このコマンドをルートCMakeLists.txtファイルに追加しましたが、機能しません。
add_custom_command(OUTPUT tests.txt
POST_BUILD
COMMAND ctest --output-on-failure)
CMakeはエラーを返さず、すべてが正常にビルドされますが、カスタムコマンドが呼び出されません。CMakeでビルドが成功するたびに何かを実行するにはどうすればよいですか?
アップデート:
私の最終的な解決策は、このマクロを作成することです。
macro(add_unit_test target target_test)
set(UNIT_TEST_TARGETS ${UNIT_TEST_TARGETS} ${target_test} PARENT_SCOPE)
add_test(target ${CMAKE_CURRENT_BINARY_DIR}/${target_test})
endmacro(add_unit_test)
リスト内のテストターゲットを呼び出しadd_test
て記憶します。このマクロによって追加されたプロジェクトのすべてのテスト。ルートCMakeLists.txtには、次のコードがあります。
add_custom_target( all_tests ALL
DEPENDS ${UNIT_TEST_TARGETS}
)
add_custom_command(TARGET all_tests
COMMENT "Run tests"
POST_BUILD COMMAND ctest ARGS --output-on-failure
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
プロジェクト内のすべての単体テストに依存するカスタムターゲットを作成します。カスタムコマンドは、all_tests
ターゲットがビルドされた後に実行されます。