cmake 如何在每次重建后进行Catch2测试?

xwbd5t1u  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(123)

我对生 rust 和货物有些经验。在默认情况下,在每个构建阶段运行测试非常方便。
是否有任何方式我可以得到类似的行为与CMake和Catch2 for C++项目?下面是我的项目结构和CMakeLists.txt。

.
├── 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)
hts6caw3

hts6caw31#

你应该可以在CMake中通过add_custom_command来实现这一点,如下所示:

add_custom_command(
     TARGET prelude_test
     COMMENT "Run tests"
     POST_BUILD 
     WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
     COMMAND ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION> -R "^prelude_test$" --output-on-failures
)

字符串
在运行makeninja(无论生成器设置为什么)时,如果触发了目标重建(即如果更改了源文件),测试将自动运行。
源代码,包含有关如何将其适应多个测试目标的信息:SO answer的数据。

m1m5dgzv

m1m5dgzv2#

您可以在构建后运行测试的shell语法中编写一个命令,然后使用shell的历史记录特性来更容易地重新运行该命令。您甚至可以将命令 Package 在shell别名或shell脚本中。例如,在Bash中:cmake --build <build dir> <other args> && ctest <args>的。
还有ctest --build-and-run ...

相关问题