2016-09-21 13 views
2

私はCMakeを使ってテスト実行ファイルを構築しています。ビルドプロセス中に、実行可能ファイルを実行して、テストが合格したかどうかを返します。そうでない場合は、ビルドが失敗するようにします。ただし、add_custom_command(... POST_BUILD ...)を使用してMakefileジェネレータを使用すると、テスト実行ファイルが削除されます(この質問の説明:Why does GNU make delete a file)。cmake add_custom_command失敗、ターゲットが削除される

CMakeが実行可能ファイルを.PRECIOUSとして扱う方法がありますか?あるいは、テストが失敗した場合に実行ファイルが削除されないようにCMakeLists.txtを変更しますか?参考のため

、私CMakeList.txtが(実際から簡体字)、次のようになります。私はをほのめかした

add_executable(UnitTest unittest.cpp) 
add_custom_command(TARGET UnitTest POST_BUILD COMMAND $<TARGET_FILE:UnitTest>) 
+1

実行可能ファイルをCMakeが削除しない場所にコピーできます。 – AndyG

+0

以前に成功したか、実行可能ファイルであっても依存関係が変わっていなくても、ビルドするたびにテストが実行されるかどうかは問題ありませんか? –

+0

@Florian:与えられた質問は明示的に「私はビルドが失敗したい」と言っているので、エラーを無視するだけでは質問者のニーズには適していません。また、重複として参照する質問は、構成( 'cmake')段階で動作します。質問はbuild(' make')段階で動作します。 – Tsyvarev

答えて

1

ソリューションはadd_custom_targetの代わりadd_custom_commandを使用することでした。テストが失敗し、runUnitTestが失敗した場合にビルドプロセス全体が失敗した場合、実行可能ファイルを削除しませんが、このターゲットはUnitTestターゲットを具体的に構築した結果として構築されません。

add_executable(UnitTest unittest.cpp) 
add_custom_target(runUnitTest UnitTest COMMAND $<TARGET_FILE:UnitTest> DEPENDS UnitTest) 
関連する問題