如何让CMake的test目标依赖默认all目标?
解决CMake中测试目标依赖全量构建的问题
CMake中的test是CTest提供的伪目标,并非实际的CMake构建目标,所以直接用add_dependencies(test all)会报错。以下是两种可行的解决方案:
方案一:自定义带依赖的测试执行目标
在项目根目录的CMakeLists.txt中添加一个自定义目标,让它先构建全量目标all,再执行测试:
# ${PROJECT_SOURCE_DIR}/CMakeLists.txt cmake_minimum_required(VERSION 3.15) project(hello-world VERSION 0.0.1 LANGUAGES C CXX) enable_testing() # ... 其他配置 ... # 自定义目标:先构建all,再运行测试 add_custom_target(run-tests COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure # 执行测试并显示失败详情 DEPENDS all # 依赖全量构建目标 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} # 指定测试运行的工作目录 )
之后只需执行构建命令(如make run-tests或ninja run-tests),就会自动先完成全量构建,再运行所有测试。
方案二:通过ctest参数强制先构建
如果希望保持使用ctest命令,可直接在调用时添加--build-target all参数,强制先完成全量构建再执行测试:
ctest --build-target all --output-on-failure
可以将该命令封装成脚本,或是在IDE的运行配置中直接配置使用。
补充说明
- 你定义的测试可执行文件
my-test默认已属于all目标的一部分(add_executable生成的目标会自动加入全量构建),核心需求就是确保测试执行前触发全量构建。 - 自定义目标的方式灵活性更高,可根据需求调整测试命令参数,比如只运行特定测试、生成更详细的测试报告等。
内容的提问来源于stack exchange,提问作者StoneThrow
相关产品推荐
相关产品推荐

