【GTest】CMAKE+GTEST

【GTest】CMAKE+GTEST,第1张

【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(test
	gtestd.lib 
	gmock_maind.lib 
	gmockd.lib 
	gtest_maind.lib
    )
gtest_discover_tests(test)

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

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

先介绍下编译windows设置

/MDdMD_DynamicDebug
/MDMD_DynamicRelease
/MTMD_StaticRelease
/MTdMD_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
	gtestd.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)使用方法和源码解析——断言的使用方法和解析

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/867524.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-12
下一篇2022-05-12

发表评论

登录后才能评论

评论列表(0条)

    保存