29

プロジェクトが正常にビルドされるたびにテストを開始したいと思います。また、一部のテストが壊れている場合は、ビルドも壊れてほしいです。デフォルトでは、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ターゲットがビルドされた後に実行されます。

4

1 に答える 1

29

この形式のadd_custom_commandは、別のCMakeターゲットが「tests.txt」に依存している場合にのみ実行されます。他のターゲットには入力ファイルとして「tests.txt」がないため、カスタムコマンドは実行されないと思います。

の2番目の形式を使用しadd_custom_commandて目標を達成できると思います。何かのようなもの:

add_custom_command(TARGET MainTest
                   POST_BUILD
                   COMMAND ctest -C $<CONFIGURATION> --output-on-failure)
于 2013-02-27T23:33:47.633 に答える