大家好,又见面了,我是你们的朋友全栈君。
项目中想用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
)
如果代码运行有问题,比如抛出未被处理的异常,编译后的程序会直接取出,不输出任何辅助信息。
解决办法是在运行参数里添加参数--gtest_break_on_failure
在命令行使用--gtest_filter=
,如
${buildProgram} --gtest_filter=testABC.*
,只测试testABC
下的用例
参考网页
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/187795.html原文链接:https://javaforall.cn