cmake:如果运行目标返回错误,则不安装

qmelpv7a  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(233)

我构建了一个可执行文件Myexe,并希望在决定安装它之前测试运行它。该决定将基于CUSTOM_COMMAND_*输出。请问我该怎么做?以下是我采取的步骤:

add_executable(Myexe ${SOURCES}) 
add_custom_command(
        TARGET Myexe
        POST_BUILD
        COMMAND Myexe
        DEPENDS MyexeLib
        RESULT_VARIABLE CUSTOM_COMMAND_RESULT
        OUTPUT_VARIABLE CUSTOM_COMMAND_OUTPUT
        ERROR_VARIABLE CUSTOM_COMMAND_ERROR )

install(TARGETS Myexe DESTINATION "${CMAKE_BINARY_DIR}/install/")
qaxu7uf2

qaxu7uf21#

如果POST_BUILD步骤失败,CMake将删除已生成的可执行文件。如果您使用POST_BUILD步骤来运行项目的测试,那么任何测试失败都将导致可执行文件被删除。因此,您将无法使用调试器调试测试失败,所以这是一个坏主意。
通常的做法是使用CTest来运行测试。如果您只想测试可执行文件是否运行(如您当前的POST_BUILD步骤所建议的那样),则只需在顶级CMakeLists.txt文件中添加对enable_testing()的调用,然后添加

add_test(
  NAME MyExeTests
  COMMAND Myexe
)

CMakeLists.txt中定义了Myexe目标。
要运行测试,您可以调用

ctest --test-dir <build-dir> --output-on-failure

在运行您当前用于安装项目的常规cmake --build <build-dir> --target installcmake --install <build-dir>命令之前,请使用以下命令。

相关问题