我对生 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)
2条答案
按热度按时间hts6caw31#
你应该可以在CMake中通过add_custom_command来实现这一点,如下所示:
字符串
在运行
make
或ninja
(无论生成器设置为什么)时,如果触发了目标重建(即如果更改了源文件),测试将自动运行。源代码,包含有关如何将其适应多个测试目标的信息:SO answer的数据。
m1m5dgzv2#
您可以在构建后运行测试的shell语法中编写一个命令,然后使用shell的历史记录特性来更容易地重新运行该命令。您甚至可以将命令 Package 在shell别名或shell脚本中。例如,在Bash中:
cmake --build <build dir> <other args> && ctest <args>
的。还有
ctest --build-and-run ...
。