cmake -D_cmake -G

cmake -D_cmake -G项目中想用googletest,项目也是用cmake管理的。于是想用cmake添加gtestset(CMAKE_PREFIX_PATH”/path/to/gtest/install/path/cmake/path”${CMAKE_PREFIX_PATH})enable_testing()set(GTEST_ROOT”/path/to/gtest…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

项目中想用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(test
	GTest::gtest 
	GTest::gmock_main
	GTest::gmock
	GTest::gtest_main    
	)
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(test
	GTest::gtest 
	GTest::gmock_main
	GTest::gmock
	GTest::gtest_main
    )

之后运行正常。这里给qtcreator打个广告。
原生支持googlte test,真是方便啊
PS:左侧“项目”下拉栏,点击,就可以看到Tests。
在这里插入图片描述

获取错误信息

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

只运行特定测试用例

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

捕获异常

参考网页

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187795.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SplitContainer(拆分条控件)

    SplitContainer(拆分条控件)1.可以将Windows窗体SplitContainer控件看作是一个复合体,它是由一个可移动的拆分条分隔的两个面板。当鼠标指针悬停在该拆分条上时,指针将相应地改变形状以显示该拆分条是可移动的。使用SplitContainer控件,可以创建复合的用户界面(通常,在一个面板中的选择决定了在另一个面板中显示哪些对象)。这种排列对于显示和浏览信息非常有用。拥有两个面板使您可以聚合不同区

  • 微型计算机课设电梯控制8255,东南大学吴健雄学微机课程设计电梯控制器.doc[通俗易懂]

    微型计算机课设电梯控制8255,东南大学吴健雄学微机课程设计电梯控制器.doc[通俗易懂]东南大学吴健雄学微机课程设计电梯控制器东南大学吴健雄学院《微机实验及课程设计》课程设计报告FBIWarning:汇编代码是好几届之前的一个学姐的只是修改了一下后完美运行是我自己写的不需要注明出处,就说是你写的专业:吴健雄学院实验室:计算机硬件实验室组别:同组人员:设计时间:2012年5月17日…

  • 一码中_amp是什么意思

    一码中_amp是什么意思每日一码将每天看到的优秀的代码或者特别的实现,记录下来a&b赋值问题_2019218_Q&Aa.x//这时a.x的值是多少?b.x//这时b.x的值是多少

  • 10分钟拿下 HashMap「建议收藏」

    10分钟拿下 HashMap「建议收藏」请相信我,你一定会更优秀!文章目录:1、什么是HashMap?什么时候选择HashMap?2、HashMap数据结构及其工作原理?2.1数据结构2.2工作原理3、HashMap和HashTable的异同?4、如何优化HashMap?1、什么是HashMap?什么时候选择HashMap?说到容器,你肯定会想到Java中对象存储容器还有Arr…

  • 常用贴片器件正负极区分图_什么是贴片元件

    常用贴片器件正负极区分图_什么是贴片元件常用贴片器件正负极区分1、电容1.1、铝电解电容1.2、钽电容2、二极管2.1、贴片二极管2.2、直插二极管1、电容贴片电容是有正否之分的,常见的贴片电容有陶瓷电容、铝电解电容、钽电容,铝电解电容和钽电容都是分正负的,两个引脚但千万不能焊错,否则电容会爆掉。1.1、铝电解电容贴片铝电解电容电容的正负极区分,电容上面有标志的黑块为负极。1.2、钽电容极性贴片电容钽电容一般为黄色壳体,壳体一端有横杠,另一端没有横杠,有横杠的为正极,另一端为负极。如下图所示。2、二极管印制板中通过P

  • js数组删除指定元素splice_js找出数组中最大的数

    js数组删除指定元素splice_js找出数组中最大的数js自带删除元素方法有:1.splice方法//获取元素在数组的下标Array.prototype.indexOf=function(val){ for(vari=0;i<this.length;i++){ if(this[i]==val) { returni; }; } return-1;};//根据数组的下标,删除该下…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号