首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Catch lib (单元测试)和CTest (CMake)集成

问Catch lib (单元测试)和CTest (CMake)集成
EN

Stack Overflow用户
提问于 2016-01-20 18:01:16
回答 2查看 16.8K关注 0票数 25

我正在寻找与CMake测试(Ctest)集成的Catch CatchLib的成功示例。据我所知,这是额外的cmake脚本,它必须解析应用程序输出?是不是有人已经写好了?可能分享了这个?

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

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

我已经将cmake script提交给了CatchLib,以实现与CTest的集成。这是Fraser99的cmake script here的简化版本

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-20 20:24:41

将Catch与CMake集成相当简单,因为它是一个仅包含头的库。

下面是你必须做的事情的简要介绍:

您可以假定Catch源代码已经安装在构建机器上,或者在构建过程中使用ExternalProject来获取它们。

在这两种情况下,您最终都会在构建计算机上的某个已知目录中得到Catch头文件。我建议创建一个接口目标,让您的测试可执行程序知道这些信息:

代码语言:javascript
复制
add_library(Catch INTERFACE)
target_include_directories(Catch INTERFACE ${YOUR_CATCH_INCLUDE_DIR})

这样,您就可以简单地将Catch指定为target_link_libraries的依赖项

代码语言:javascript
复制
add_executable(my_test ${MY_TEST_SOURCES})
target_link_libraries(my_test PUBLIC Catch)

与通常的CMake一样,add_test负责将测试引入CTest:

代码语言:javascript
复制
enable_testing()
add_test(NAME MyAwesomeTest COMMAND my_test)

这已经够了。在构建的项目上运行make test以运行您的测试。

如果您需要查看完整的工作示例,我有一个project on Github可以做到这一点。

Catch较新版本的更新:如果你已经升级到Catch2,该版本带有自己的包配置文件,所以你只需调用find_package就可以集成它。这提供了a smoother CMake integration overall,您不必开始定义自己的接口目标。虽然上面的方法仍然适用于Catch2,但如果您的Catch版本已经支持find_package,我建议您使用它。

票数 42
EN

Stack Overflow用户

发布于 2017-02-26 09:05:42

使用以下命令安装catch:

代码语言:javascript
复制
 $ 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中:

代码语言:javascript
复制
find_package(Catch2 REQUIRED)
target_link_libraries(tests Catch2::Catch2)

参见here。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34896891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档