cmake add_custom_command 失败,目标被删除

Mue*_*ito 5 c++ cmake gnu-make

我正在使用 CMake 构建一个测试可执行文件。在构建过程中,我想运行可执行文件,它返回测试是否通过。如果没有,我希望构建失败。但是,当我使用add_custom_command(... POST_BUILD ... ), 并使用Makefile生成器时,测试可执行文件将被删除(在这个问题中解释:Why does GNU make delete a file)。

有没有办法让 CMake 将可执行文件视为.PRECIOUS,或者以其他方式更改 CMakeLists.txt 以便在测试失败时不会删除可执行文件?

作为参考,我的 CMakeList.txt 如下所示(从实际简化):

add_executable(UnitTest unittest.cpp)
add_custom_command(TARGET UnitTest POST_BUILD COMMAND $<TARGET_FILE:UnitTest>)
Run Code Online (Sandbox Code Playgroud)

Rob*_*ost 3

我提到的解决方案是使用add_custom_target而不是add_custom_command. 虽然如果测试失败它不会删除可执行文件,并且如果 runUnitTest 失败则整个构建过程也会失败,但此目标不会因专门构建 UnitTest 目标而构建。

add_executable(UnitTest unittest.cpp)
add_custom_target(runUnitTest UnitTest COMMAND $<TARGET_FILE:UnitTest> DEPENDS UnitTest)
Run Code Online (Sandbox Code Playgroud)