目录
0 背景
之前写代码一直有习惯于搭建LLT框架,作为测试防护网能够大大提升代码健壮性,有效避免修改引入,另一方面测试用例作为项目重要资产也应该有个地方可以归档,写入LLT用例里面还可以通过git上库。
当前项目中只有业务应用代码,还未有对应用例,为了后续开发以及测试方便,抽了点时间研究在windows下编译GTest并执行。
1 环境
本地项目编译/运行的相关环境如下所示:
编号 | 名称 | 版本 |
---|---|---|
1 | 操作系统 | Windows 11 |
2 | 编译环境 | Qt 5.8 |
3 | 编程语言 | C++14 |
4 | 编译器版本 | VS2015 MSVC 19.0 |
5 | GTest版本 | V1.15.2 |
2 生成GTest动态库
2.1 下载最新GTest库
GTest源码可以到GitHub下载,取对应的Release版本即可。通过打开网页可以看到最新版本是1.15.2,我现在用的就是最新的。
如果本地配好Git环境直接可以用命令行操作方便快捷:
git clone https://github.com/google/googletest.git -b v1.15.2
如果遇到git clone链接超时可以参考这个博客进行配置,就两个命令,亲测有效。
2.2 编译GTest
2.2.1 cmake gtest
一般来说,编译常规操作如下:
mkdir build
cd build
cmake ..
make && make install
但是我在执行的过程中出现很多问题,例如在gtest默认生成是静态库而不是动态库,还有编出来的版本是x86而不是x64等等。正常来说普通方式就能够编译,由于不同环境之间差异,我本地编译一直失败,于是乎我才用gtest和gmock单独编译的方式
编译命令如下:
mkdir build
cd build
cmake -G "Visual Studio 14 2015 Win64" ..
这里我强制指定了用64位编译,是因为我Qt项目所有的编译选项都是64位的,包括其他依赖库,为了配套,我选择编译64位。
执行情况:
到这里就能执行成功。同样的操作对gmock进行编译。然后就能获得对应.sln文件。(这一步编译成功后,我尝试在上一层目录,即gtest、gmock同级目录下的build执行命令,也是可以成功的,但此时我的lib库已经编译成功且生效了,只能说还是走了一些弯路)
2.2.1.1 遇到问题:target参数不对
问题情况截图报错如下:
根据报错提示定位Cmakelist里面执行代码,发现有个参数一开始没有赋值:GOOGLETEST_VERSION,于是我在执行开端前面加上对它的赋值且进行版本打印:
set(GOOGLETEST_VERSION "v1.15.2")
message(STATUS "GOOGLETEST_VERSION: ${GOOGLETEST_VERSION}")
重新执行cmake,问题解决。