7

私の CMake プロジェクトには、特定の単体テスト セットを実行するだけのターゲットがいくつかあります (たとえば、runTestsForArunTestsForB) runTestsForC。またtests、これらすべての単体テスト ターゲットに依存するターゲット があるので、1 つのコマンドでそれらを実行できます。

CLion を使用している IDE は、デフォルトで並列 make ビルドを使用しようとします (これは、継続的インテグレーション サーバーでも実行したいと考えています)。ただし、テストは現在も並行して実行されているようで、一部のテストはこれに対して作成されていないため (ローカル ループバックを使用してソケットでいくつかの魔法を実行します)、失敗することがあります..

testsそのため、ターゲットの依存関係の一部またはすべてに対してシリアル実行を強制したいと考えています。残念ながら、これを行う方法に関する情報を検索していたとき、CMake のドキュメントは役に立ちませんでした。これは私の質問につながります:これはまったく可能ですか?可能であればどのように行うことができますか?

4

2 に答える 2

7

手動でtestsターゲットを宣言する代わりに、CTest ツールを使用できます。コマンドを使用してテスト ターゲットを作成すると、CMake はすべてのテストを実行するターゲットをadd_test自動的に作成します。tests

enable_testing()
add_test(NAME TestsForA COMMAND <command>)
add_test(NAME TestsForB COMMAND <command>)
set_tests_properties(TestsForA TestsForB  PROPERTIES RUN_SERIAL TRUE)

make testsその後、またはctest -j8 .ビルドツリーで実行できます。テストはシリアル化されます。

詳細については、次を参照してください。

于 2015-05-01T10:25:59.953 に答える