前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cmake -D_cmake -G

cmake -D_cmake -G

作者头像
全栈程序员站长
发布2022-11-11 13:22:12
2.2K0
发布2022-11-11 13:22:12
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

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

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

出现错误:

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

代码语言:javascript
复制
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)

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

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


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

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

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

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

代码语言:javascript
复制
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下的用例

捕获异常

参考网页

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月29日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 之后运行正常。这里给qtcreator打个广告。 原生支持googlte test,真是方便啊 PS:左侧“项目”下拉栏,点击,就可以看到Tests。
  • 获取错误信息
  • 只运行特定测试用例
  • 捕获异常
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档