英文:
cmake: Do not install if running a target returns error
问题
我构建了一个可执行文件Myexe
,想在决定安装前测试运行它。决定将基于CUSTOM_COMMAND_*
输出。我该如何做呢?以下是我采取的步骤:
添加可执行文件(Myexe)和源文件。
添加自定义命令:
- 目标为Myexe
- 后期构建
- 命令为Myexe
- 依赖于MyexeLib
- 以RESULT_VARIABLE保存结果到CUSTOM_COMMAND_RESULT
- 以OUTPUT_VARIABLE保存输出到CUSTOM_COMMAND_OUTPUT
- 以ERROR_VARIABLE保存错误到CUSTOM_COMMAND_ERROR
安装目标Myexe到"${CMAKE_BINARY_DIR}/install/"。
英文:
I build an executable Myexe
and would like to test run it before deciding to install it. The decision would be based on the CUSTOM_COMMAND_*
outputs.
How may I do that please?
Here are the steps I take:
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/")
答案1
得分: 2
If a POST_BUILD step fails, CMake will delete the executable that has been built. If you use POST_BUILD steps to run the project's tests, any test failure will cause the executable to be deleted. You won't be able to debug the test failure with a debugger, so this is a bad idea.
The way this is usually done instead is to use CTest to run the tests. If all you want to test is that the executable runs (as your current POST_BUILD step suggests), then it is sufficient to add a call to enable_testing()
in your top-level CMakeLists.txt
file and then add:
add_test(
NAME MyExeTests
COMMAND Myexe
)
in the CMakeLists.txt
where the Myexe
target is defined.
To run the tests, you can then call:
ctest --test-dir <build-dir> --output-on-failure
before running your regular cmake --build <build-dir> --target install
or cmake --install <build-dir>
command you currently use to install your project.
英文:
If a POST_BUILD step fails CMake will delete the executable that has been build. If you use POST_BUILD steps to run the project's tests then any test failure will cause the executable to be deleted. You thus won't be able to debug the test failure with a debbuger, so this is a bad idea.
The way this is usually done instead is to use CTest to run the tests. If all you want to test is that the executable runs (as your current POST_BUILD step suggests) then it is sufficient to add a call to enable_testing()
in your top-level CMakeLists.txt
file and then add
add_test(
NAME MyExeTests
COMMAND Myexe
)
in the CMakeLists.txt
where the Myexe
target is defined.
To run the tests you then can call
ctest --test-dir <build-dir> --output-on-failure
before running your regular cmake --build <build-dir> --target install
or cmake --install <build-dir>
command you currently use to install your project.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论