有没有人在 Visual Studio 2010 中成功构建了 gmock 和 gtest?我已经尝试使用 1.5.0 版本,但我只得到难以理解的编译错误。
2 回答
我在 google 群组中发现了这个关于在 VS2010 下构建 gmock-1.5.0 时发现的问题的线程。在线程之后,我创建了一个简短的自述文件,它对我有用,所以这里是:
- 从Google Mock下载 gmock 1.5.0 。
- 解压到机器上的库文件夹(例如 C:\Libs\gmock-1.5.0)。从现在开始,这个文件夹将被称为“GMOCK_ROOT”。
- 打开VS2010,加载解决方案:GMOCK_ROOT\msvc\gmock.sln。让VS把它从VS2008转换成VS2010。 重要的!不要双击 GMOCK_ROOT\msvc 下的解决方案文件。这导致了不好的转换。
根据线程对源执行以下更改:
在项目 gmock --> 私有头文件 --> gmock-internal-utils.h 中:
- 第 201、202 行:注释掉“Helper”函数:
char Helper(To);
static char (&Helper(...))[2]; // NOLINT
- 第 210-219 行:将整个
#ifdef..#endif
部分替换为:
static const bool value = std::is_convertible<From, To>::value;
在项目 gmock_test --> 源文件 --> gmock-printers_test.cc,第 848 行:将 NULL 参数显式转换为
void*
,否则 VS 会自动将其视为 null int。结果行应如下所示:t10(false, 'a', 3, 4, 5, 1.5F, -2.5, str, static_cast<void*>(NULL), "10");
- 构建解决方案。这应该会导致 4 个警告,如下所述,它们(可能)是可以的。
希望这可以帮助,
波阿斯
来自第 5 步的 VS2010 编译器警告(请参阅末尾的备注):
警告 1 警告 C4996:“std::_Copy_impl”:带有可能不安全参数的函数调用 - 此调用依赖调用者检查传递的值是否正确。要禁用此警告,请使用 -D_SCL_SECURE_NO_WARNINGS。请参阅有关如何使用 Visual C++ 'Checked Iterators' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xutility 2227 1 的文档
警告 2 警告 C4996:“std::_Copy_impl”:带有可能不安全参数的函数调用 - 此调用依赖于调用者检查传递的值是否正确。要禁用此警告,请使用 -D_SCL_SECURE_NO_WARNINGS。请参阅有关如何使用 Visual C++ 'Checked Iterators' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xutility 2227 1 的文档
警告 4 警告 C4413: 'std::tr1::_Cons_node<_Car,_Cdr>::_Value' : 引用成员被初始化为一个临时的,在构造函数退出后不会持续存在 C:\Program Files (x86)\Microsoft Visual工作室 10.0\VC\include\tuple 137 1
警告 3 警告 C4373:'testing::gmock_generated_function_mockers_test::MockFoo::TakesConst':虚函数覆盖 'testing::gmock_generated_function_mockers_test::FooInterface::TakesConst',当参数仅相差 const/volatile 时,以前版本的编译器不会覆盖限定符 C:\Libs\gmock-1.5.0\test\gmock-generated-function-mockers_test.cc 133 1
关于警告的备注:
- 警告 1,2 是关于 xutility 中的 Copy() 因安全而被弃用的。由于模拟库不是生产版本的一部分,这对我来说是可以的。
- 根据线程,警告 4 是可以的。
- 警告 3:不确定,但一切似乎都运行良好。
如果有人在构建 gmock 解决方案本身时遇到问题,即无法生成 .lib 文件,这对我来说是这样做的(与 2015 年相比):
https://groups.google.com/forum/#!topic/googlemock/FaEAHedxpAQ
gmock_config.props 包含 GTestDir 的过时定义:
<GTestDir>../../gtest</GTestDir>
将其替换为
<GTestDir>../../../googletest</GTestDir>
,您应该可以克服错误。
至少编译了库,尽管在那里提出了更改,但我仍然得到 gmock_test 错误。