【GTest】CMAKE+GTEST

项目中想用google test,项目也是用cmake管理的。
于是想用cmake 添加gtest

set(CMAKE_PREFIX_PATH"/path/to/gtest/install/path/cmake/path"${CMAKE_PREFIX_PATH})enable_testing()set(GTEST_ROOT "/path/to/gtest/install/path")find_package(GTest REQUIRED)add_executable(test test.cpp)
target_link_libraries(test${GTEST_LIBRARIES}${GTEST_MAIN_LIBRARIES})
gtest_discover_tests(test)

出现错误:

CMake Error at D:/Program Files/cmake/cmake-3.14.4-win64-x64/share/cmake-3.14/Modules/FindPackageHandleStandardArgs.cmake:137 (message):Could NOT find GTest (missing: GTEST_LIBRARY GTEST_MAIN_LIBRARY)

我检查了FindGTest.cmake,发现在197行

FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)

第一个参数GTest在之前的代码中没有出现。
于是解决办法就很清楚了,把FindGTest.cmake文件删除,使用GTest自带的cmake。
成功运行。

问题原因:可能是因为使用GTest版本比较新,cmake没有跟上步伐。


但之后提供链接不到库,不想折腾了
修改了cmake配置

enable_testing()set(GTEST_ROOT "/path/to/gtest/install/path")
include_directories(${GTEST_ROOT}/include)
add_executable(test test.cpp)
target_link_libraries(testgtestd.lib gmock_maind.lib gmockd.lib gtest_maind.lib)
gtest_discover_tests(test)

这次配置正确了,但是出现如下错误:

error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(obs-browser.obj 中)

先介绍下编译windows设置

/MDd MD_DynamicDebug
/MD MD_DynamicRelease
/MT MD_StaticRelease
/MTd MD_StaticDebug

google test默认是按静态编译的(/MTd),而我按(/MDd)编译,所以不匹配
于是修改cmake配置:

set(CMAKE_CXX_FLAGS_RELEASE "/MT")
set(CMAKE_CXX_FLAGS_DEBUG "/MTd")
enable_testing()set(GTEST_ROOT "/path/to/gtest/install/path")
include_directories(${GTEST_ROOT}/include)
add_executable(test test.cpp)
target_link_libraries(testgtestd.lib gmock_maind.lib gmockd.lib gtest_maind.lib)
gtest_discover_tests(test)

之后运行正常。这里给QTCREATOR打个广告。
原生支持GOOGLTE TEST,真是方便啊

PS:左侧“项目”下拉栏,点击,就可以看到TESTS。

获取错误信息

如果代码运行有问题,比如抛出未被处理的异常,编译后的程序会直接取出,不输出任何辅助信息。
解决办法是在运行参数里添加参数--gtest_break_on_failure

只运行特定测试用例

在命令行使用--gtest_filter=,如
${buildProgram} --gtest_filter=testABC.*,只测试testABC下的用例

捕获异常

https://blog.csdn.net/breaksoftware/article/details/51059406

参考链接:
CMAKE+GTEST

Google Test(GTest)使用方法和源码解析——断言的使用方法和解析

【GTest】CMAKE+GTEST相关推荐

  1. 【C++】Cmake使用教程(看这一篇就够了)

    文章目录 引言 一 环境搭建 二 简单入门 2.1 项目结构 2.2 示例源码 2.3 运行查看 三 编译多个源文件 3.1 在同一个目录下有多个源文件 3.1.1 简单版本 3.1.1.1 项目结构 ...

  2. 【C++】google gtest 详解

    1.参考博客: https://blog.csdn.net/baijiwei/article/details/81265491 https://www.cnblogs.com/coderzh/arch ...

  3. 【转载】CMake 简介和 CMake 模板

    转载自我的博客: CMake 简介和 CMake 模板 . 如果你用 Linux 操作系统,使用 cmake 会简单很多,可以参考一个很好的教程: CMake 入门实战 | HaHack .如果你用 ...

  4. 【ceph】cmake管理Ceph编译+Ceph工程目录+cmake 实战学习

    前言 Ceph cmake 工程 cmake生成的目录 cmake工程添加新模块(CMakeLists.txt) 添加动态库依赖 cmake导入外部链接库 *.cmake文件 cmake生成编译DEB ...

  5. 【Tools】CMAKE的使用

    二.概念 out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录中: 三.基本结构 1,依赖CMakeLists.txt文件,项目主目标一个 ...

  6. 【Tools】cmake 常用变量和常用环境变量查表手册---整理

    原文链接:https://blog.csdn.net/gubenpeiyuan/article/details/8667279 一.cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量 ...

  7. 【Tools】cmake之编写CMakeLists.txt示例

    参考这个博客: cmake配置项目引用动态库 编写CMakeLists.txt 指定cmake版本: cmake_minimum_required(VERSION 3.18) 指定项目名: PROJE ...

  8. 【linux】CMake Error in CMakeLists.txt: No CMAKE_CXX_COMPILER could be found.

    – The C compiler identification is GNU 7.5.0 – The CXX compiler identification is unknown – Check fo ...

  9. 【windows】CMake安装小结

    下载安装包 官网下载地址 根据自己的系统选择相应的安装版本,我这里是win 10 64bit,所以我下载: 点击即可下载. 安装 下载完成直接双击安装 选择添加环境变量到所有账户 安装完成,重启使环境 ...

最新文章

  1. 【POJ】3617 Best Cow Line (字典序 字符串)
  2. 深度解读!新一代大数据引擎Flink厉害在哪?(附实现原理细节)
  3. SCAN Learning to Classify Images without Labels(翻译)
  4. linux下使用rpm安装libxml2,gcc,gcc-c++等基本包
  5. VTK:几何对象之PolygonIntersection
  6. I/O流(三)—对象的序列化和反序列化
  7. 【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式
  8. x1电源灯一直闪_小器鬼LED平板灯 | 明亮好光,洁净好家
  9. html生成pdf字体错误,使用wkhtmltopdf时显示为PDF的错误字体
  10. 服务器的固态硬盘使用raid非ssd,畅谈固态硬盘搭建RAID的方法
  11. Activemq配置文件详解
  12. HTML frameset 标签 cols 属性
  13. 【软件定义汽车】-【架构篇】-迈向SOA软件架构,软件定义汽车成为现实
  14. MySQL——初识MySQL
  15. 基于MATLAB的数字证件号识别
  16. 小程序云开发(一):新建云开发模板
  17. 【技术】基于angularJS的前端自动化测试工具Protractor快速入门
  18. 东信社保卡医保卡底层指令通讯协议(支持单片机、Linux、ARM等嵌入式系统使用)
  19. Java+Selenium爬取JavaScript返回的网页数据
  20. 统计分析 -- 正态分布

热门文章

  1. LTE测量事件主要有下面几种:Event A1、Event A2、Event A3、Event A4、Event A5、Event B1、Event B2...
  2. html页面转盘如何实现,原生(纯)js+html+css实现移动端抽奖转盘系统
  3. java return用法总结
  4. layui表单验证支持select下拉框的一种方法
  5. 【Linux】基本的指令(终章)
  6. 【Android】开源项目汇总-备用
  7. kubernetes设置阿里云私有仓库
  8. leaflet叠加多个面(面的数据结构)(leaflet篇.62)
  9. chkconfig设置开机自启
  10. iphone开发之Google地图实现…