文章目录
- vs - vs2015编译gtest-v1.12.1
- 概述
- 点评
- 笔记
- 将工程迁出到本地后,如果已经编译过工程,将工程Revert, Clean up 干净。
- 编译用的CMake, 优先用VS2019自带的
- 打开VS2015X64本地命令行
- 编译gtest工程
- 测试
- 安装
- 自己写个测试工程,看看编译出来的gTest库是否正确
- 测试工程代码
- 备注
- END
vs - vs2015编译gtest-v1.12.1
概述
前几天,有个同学私信我,问我在不在?
你谁啊,我在不在关你啥事啊? 我们认识么? 我们熟么? 凭啥理你啊? 秒删。
今天碰巧看到他在csdn上留的帖子,大概知道他要解决啥问题了。
他遇到的问题是用VS2015编译gtest1.12.1编译不过。
他提问题的方式有问题。
只说不行(如果行你就不提问题了)。
哪里不行啊?具体啥现象啊?
你具体咋操作的, 引起的不行啊?
就说不行,谁知道哪不行啊?
这样的帖子,除了吃饱了撑的2B, 谁会去回帖?
看到帖子下面,有2个所问非所答的回帖,都不知道这些回帖的人图个啥, 我被帖子双方的行为深深的震撼, 表示看不懂。
有这个垃圾回帖的时间,悠闲的喝口水,安安静静的做个美男子不好么?
大家讨论问题,你要问就好好的问,我如果准备要要回答就好好的回答。
当然你可以好好的问,但是别人可以保留不回答的权利(大家萍水相逢,互不相欠。大家都有自己的事情要做, 没那个时间和心情)。
点评
这样的问题基本不需要问别人,只要开源库官方保证了可以用VS2015编译过,那就是一定能编译过。
那么大个google厂, 不骗工程师的。
如果编译不过,自己换几个CMake版本再试试,没特别的。
这种基础的编译问题,你问别人,大概率不会有人理你的(有质量的回答,垃圾回帖除外)。除非人家不经意的看到,心情还可以,在闲时说2句。
官方文档都说能编译过,为啥你编译不过?
笔记
将工程迁出到本地后,如果已经编译过工程,将工程Revert, Clean up 干净。
确认自己要编译的是gtest1.12.1
编译用的CMake, 优先用VS2019自带的
提取VS2019自带CMake的方法见笔记(vs2019 - 替换vs2019自带的cmake)
只要找到CMake的位置,拷贝出来用就行。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake
我将VS2019的CMake拷贝到磁盘的单独位置,给其他命令行用。
VS2013/VS2015/VS2017是没有内建CMake的。
VS2019的这个CMake版本是 3.20.21032501-MSVC_2 ,不是公版的CMake, 是MS针对VS做了优化适配的版本。
如果用VS2019自带的这个 CMake-3.20.21032501-MSVC_2 可以,就优先用。
如果不行,再尝试自己换公版的CMake。
打开VS2015X64本地命令行
先确认一下,vs2015X64本地命令行是没有CMake的。
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>cmake --version
'cmake' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
将自己整理的VS2019CMake位置加入path.
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>set path=D:\my_dev\devToolSet\CMake_3d2_vs2019\bin;%path%
再确认一下,用的是不是VS2019自带的CMake?
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>cmake --version
cmake version 3.20.21032501-MSVC_2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
切到gTest库目录
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>cd /d D:\3rd_prj\googletest
D:\3rd_prj\googletest>
建立构建文件夹my_build
cls && mkdir .\my_build && cd .\my_build
用CMake构建VS2015版的gTest工程
cmake .. -G "Visual Studio 14 2015 Win64"
D:\3rd_prj\googletest\my_build>cmake .. -G "Visual Studio 14 2015 Win64"
-- Selecting Windows SDK version 10.0.14393.0 to target Windows 10.0.19045.
-- The C compiler identification is MSVC 19.0.24247.2
-- The CXX compiler identification is MSVC 19.0.24247.2
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Python: C:/Users/chenx/AppData/Local/Programs/Python/Python310/python.exe (found version "3.10.7") found components: Interpreter
-- Looking for pthread.h
-- Looking for pthread.h - not found
-- Found Threads: TRUE
-- Configuring done
-- Generating done
-- Build files have been written to: D:/3rd_prj/googletest/my_build
D:\3rd_prj\googletest\my_build>
构建成功
用VS2015打开构建好的googletest-distribution.sln
选择x64_release
编译gtest工程
编译成功
测试
工程显示没有测试用例。
不管了,只要能编译过,就没问题的,工程品质由开源作者来保证。
安装
将 C:\Program Files\googletest-distribution 目录归档,供自己的工程用。
自己写个测试工程,看看编译出来的gTest库是否正确
工程选为x64_Release,要和gTest库的编译模式匹配,否则编译不过。
在用VS2015编译时,我没有选编译方式,用的默认的。
在测试工程中发现,gTest的releaseX64库选的是/MT,
先将工程改成/MT
等测试通过了,再编译gTest库选项为/MD, 这自己工程的代码产生模式要一致。
编译通过了
测试工程代码
// gTestCaseB.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
// gTest工程的Main函数在库中,只需要提供测试用例即可
//int main()
//{
// return 0;
//}
// 将gTest的include目录加入编译器选项(c++包含路径)
// D:\my_dev\my_local_git_prj\soft\exp\exp015_gtest\gTestCaseB\googletest-distribution\include
// 将gTest的lib目录加入编译器选项(c++库路径)
// 将 D:\my_dev\my_local_git_prj\soft\exp\exp015_gtest\gTestCaseB\googletest-distribution\lib
#include "gtest/gtest.h"
#pragma comment(lib, "gtest.lib")
#pragma comment(lib, "gtest_main.lib")
TEST(MyTestSuiteA, MyTestCaseA)
{
int x = 1;
int y = 2;
ASSERT_TRUE(3 == (x + y));
}
在cmd中运行 D:\my_dev\my_local_git_prj\soft\exp\exp015_gtest\gTestCaseB\x64\Release\gTestCaseB.exe
C:\Users\me>D:\my_dev\my_local_git_prj\soft\exp\exp015_gtest\gTestCaseB\x64\Release\gTestCaseB.exe
Running main() from D:\3rd_prj\googletest\googletest\src\gtest_main.cc
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from MyTestSuiteA
[ RUN ] MyTestSuiteA.MyTestCaseA
[ OK ] MyTestSuiteA.MyTestCaseA (0 ms)
[----------] 1 test from MyTestSuiteA (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (1 ms total)
[ PASSED ] 1 test.
说明gTest库是可以正常用的。
备注
用CMake默认产生的工程,编译方式中的代码产生方式,可能和自己工程中的不一样。
需要调整为自己工程一致的代码产生方式。