GoogleTest编译时出现MT_StaticRelease错误



如何使用/MT选项强制谷歌测试编译?我看到谷歌测试试图用MT编译(internal_utils.cmake第33行(:

if (NOT BUILD_SHARED_LIBS AND NOT gtest_force_shared_crt)
string(REPLACE "/MD" "-MT" ${flag_var} "${${flag_var}}")
endif()

但它不起作用(BUILD_SHARED_LIBS和gtest_force_SHARED_rt被禁用(
当我的项目使用MT:编译时,我会出错

gtest.lib(gtest-all.obj(:错误LNK2038:检测到的不匹配"RuntimeLibrary":值";MD_DynamicRelease";与值不匹配"MT_StaticRelease";

还有一些LNK2005和LNK4217。如果我试图在没有MT的情况下编译我的项目,那么所有的编译都可以。我该如何解决?提前感谢!

if是一个测试,实现了一个开关,允许在之前配置它,包括googletest。

手册中也提到:

Visual Studio动态与静态运行时间

默认情况下,新的Visual Studio项目动态链接C运行时但是GoogleTest静态地链接它们。这将生成一个错误看起来如下所示:gtest.lib(gtest-all.obj(:errorLNK2038:检测到"RuntimeLibrary"不匹配:值"MTd_StaticDebug"与main.obj中的值"MDd_DynamicDebug"不匹配

GoogleTest已经为此提供了CMake选项:gtest_force_shared_crt

启用此选项将使gtest动态链接运行时并且与包含它的项目相匹配。

所以只需在你的项目中设置它,例如:

set(gtest_force_shared_crt on)
include(FetchContent)
FetchContent_Declare(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG main)
FetchContent_MakeAvailable(googletest)
enable_testing()

最新更新