我正在寻找 Catch CatchLib的成功示例与 CMake 测试 (Ctest) 集成的成功示例。据我了解,这是必须解析应用程序输出的附加 cmake 脚本?有人已经写过这个了吗?大概分享了这个?
====================================================
更新(已找到解决方案):
我已将cmake 脚本提交给 CatchLib ,以便将 Catch 与 CTest 集成。这是 Fraser99 的 cmake 脚本的简化版本
我正在寻找 Catch CatchLib的成功示例与 CMake 测试 (Ctest) 集成的成功示例。据我了解,这是必须解析应用程序输出的附加 cmake 脚本?有人已经写过这个了吗?大概分享了这个?
====================================================
更新(已找到解决方案):
我已将cmake 脚本提交给 CatchLib ,以便将 Catch 与 CTest 集成。这是 Fraser99 的 cmake 脚本的简化版本
将 Catch 与 CMake 集成相当简单,因为它是一个仅包含标头的库。
以下是您必须执行的操作的简要说明:
您可以假设 Catch 源已经安装在构建机器上,或者使用ExternalProject作为构建过程的一部分来获取它们。
无论哪种情况,您最终都会在构建机器上的某个已知目录中获得 Catch 头文件。我建议创建一个接口目标,以使您的测试可执行文件知道此信息:
add_library(Catch INTERFACE)
target_include_directories(Catch INTERFACE ${YOUR_CATCH_INCLUDE_DIR})
这样,您可以简单地将 Catch 指定为以下项的依赖项target_link_libraries
:
add_executable(my_test ${MY_TEST_SOURCES})
target_link_libraries(my_test PUBLIC Catch)
与 CMake 一样,add_test
负责将测试引入 CTest:
enable_testing()
add_test(NAME MyAwesomeTest COMMAND my_test)
就是这样。make test
在构建的项目上运行以运行您的测试。
如果您需要查看完整的工作示例,我在 Github 上有一个项目可以执行此操作。
更新 Catch 的新版本:如果您已经升级到 Catch2,那么该版本带有自己的包配置文件,因此您只需调用find_package
. 这提供了整体上更流畅的 CMake 集成,您不必开始定义自己的界面目标。尽管即使使用 Catch2,上述方法仍然有效,但find_package
如果您的 Catch 版本已经支持它,我建议您使用。
安装捕获:
$ git clone https://github.com/catchorg/Catch2 <catch_src_dir>
$ mkdir <catch_bin_dir>
$ cd <catch_bin_dir>
$ cmake -DBUILD_TESTING:BOOL=FALSE <catch_src_dir>
$ make
$ make install
然后将以下内容添加到 CMakeLists.txt:
find_package(Catch2 REQUIRED)
target_link_libraries(tests Catch2::Catch2)
见这里。