You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Catch2测试在每次CMake项目重建后自动运行?

在CMake+Catch2项目中实现构建自动运行测试

问题描述

我有使用Rust和Cargo的经验,Cargo默认会在每次构建时自动运行测试,非常便捷。请问是否可以在使用CMake和Catch2的C++项目中实现类似的行为?

项目结构:

.
├── CMakeLists.txt
├── LICENSE
├── README.md
├── library.properties
├── src
│   ├── math.hpp
│   ├── prelude.hpp
│   ├── signal.hpp
│   └── sm.hpp
└── test
    ├── CMakeLists.txt
    └── prelude_test.cpp

根目录CMakeLists.txt:

cmake_minimum_required(VERSION 3.11)

project(
    efp
    VERSION 0.1
    LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED On)

find_package(Catch2 3 REQUIRED)

include(CTest)
include(Catch)
enable_testing()

add_library(efp INTERFACE)
target_include_directories(efp INTERFACE "./src")

add_subdirectory("./test")

测试目录test/CMakeLists.txt:

add_executable(prelude_test prelude_test.cpp)
target_link_libraries(prelude_test
    PRIVATE
    Catch2::Catch2WithMain
    efp)

catch_discover_tests(prelude_test)

实现方案

方案一:全局构建自动运行所有测试

修改根目录的CMakeLists.txt,在末尾添加以下代码,创建一个默认执行的自定义目标,绑定测试构建与运行:

# 获取测试目录下的所有可执行目标
get_property(TEST_EXECUTABLES DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test PROPERTY BUILDSYSTEM_TARGETS)

# 创建自动运行测试的目标,加入默认构建流程
add_custom_target(run_tests ALL
    COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure
    DEPENDS ${TEST_EXECUTABLES}
    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
    COMMENT "Running all tests..."
)
  • ALL关键字让该目标随默认构建命令(如make/ninja)自动执行
  • DEPENDS确保所有测试可执行文件先编译完成,再运行测试
  • ${CMAKE_CTEST_COMMAND}会调用CMake的测试框架,自动识别catch_discover_tests注册的用例,--output-on-failure在测试失败时展示详细输出

方案二:单个测试构建后自动运行

如果只想让特定测试在编译后自动执行,修改test/CMakeLists.txt,在现有代码后添加:

# 构建完成后自动运行当前测试
add_custom_command(
    TARGET prelude_test
    POST_BUILD
    COMMAND prelude_test
    COMMENT "Running prelude_test..."
)
  • POST_BUILD指定命令在测试可执行文件编译完成后立即执行
  • 直接调用测试程序,无需通过CTest包装,适合快速验证单个测试模块

使用说明

  • 执行默认构建命令(cmake --build .、make或ninja)时,测试会自动运行
  • 若需临时跳过测试,可指定构建核心库目标:cmake --build . --target efp
  • 方案一的CTest输出会包含所有测试用例的结构化结果,方便查看整体测试状态

内容的提问来源于stack exchange,提问作者lighthouse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:07:41