25

我正在寻找 Catch CatchLib的成功示例与 CMake 测试 (Ctest) 集成的成功示例。据我了解,这是必须解析应用程序输出的附加 cmake 脚本?有人已经写过这个了吗?大概分享了这个?

====================================================

更新(已找到解决方案):

我已将cmake 脚本提交给 CatchLib ,以便将 Catch 与 CTest 集成。这是 Fraser99 的 cmake 脚本的简化版本

4

2 回答 2

42

将 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 版本已经支持它,我建议您使用。

于 2016-01-20T12:24:40.707 回答
6

安装捕获:

 $ 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)

这里

于 2017-02-26T01:05:41.813 回答