• build googleTest V1.12.1 by vs2022


    build googleTest V1.12.1 by vs2022

    概述

    查资料时, 看到googleTest有新版了, 试试.

    结果编译报错, 说找不到pthread.lib.

    折腾了几次, 编译过了.

    googleTest_V1.12.1包含googlemock和googletest工程. 出错的那次实验, 是进入了googletest工程下编译报的错.

    正确的做法应该操作的工程根目录下的CMakeLists.txt, 而不是googleTest目录下的CMakeLists.txt.

    实验

    googleTest官方下载点

    https://github.com/google/googletest/releases

    请添加图片描述

    当前版本是1.12.1, 2022年6月30日发布的版本.

    请添加图片描述

    拉到V1.12.1下载页面的末尾有源码下载连接, 点击下载.

    github下载真拉跨, 连接不是每次都能可靠下载完.

    还好上次下载时, 已经下载完了. 已经下载后改名为 googleTest_v1.12.1.zip

    从gitee上克隆了一个人家从github上迁出的googletest工程, 切到v1.12.1的分支, 用BC4比较解开的googleTest_v1.12.1.zip, 2进制相同.

    现在拿解压后的googleTest_v1.12.1.zip做实验

    将解开后的目录, subst成Z盘

    请添加图片描述

    编译

    可以CMake (cmake-gui)来编译, 还要设置参数, 不必要的麻烦.

    我选择vs2022的开发者命令行来编译, 效果都一样. 操作简单.

    请添加图片描述

    用记事本打开CMakeLists.txt, 看一下CMake版本有啥要求.

    # Note: CMake support is community-based. The maintainers do not use CMake
    # internally.
    
    cmake_minimum_required(VERSION 3.5)
    
    if (POLICY CMP0048)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    看到要求的最低CMake版本为3.5

    在vs2022命令行中看一下cmake的版本

    **********************************************************************
    ** Visual Studio 2022 Developer Command Prompt v17.3.3
    ** Copyright (c) 2022 Microsoft Corporation
    **********************************************************************
    
    C:\Program Files\Microsoft Visual Studio\2022\Professional>cmake --version
    cmake version 3.23.22060601-MSVC_2
    
    CMake suite maintained and supported by Kitware (kitware.com/cmake).
    
    C:\Program Files\Microsoft Visual Studio\2022\Professional>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    看到CMake版本是3.23, 那可以满足编译googleTest的要求了.

    建立一个编译结果输出的文件夹build, 进入build目录

    Z:\>dir
     驱动器 Z 中的卷没有标签。
     卷的序列号是 6CC8-4321
    
     Z:\ 的目录
    
    2022/06/28  01:14              .
    2022/06/28  01:14              ..
    2022/06/28  01:14               116 .clang-format
    2022/06/28  01:14              .github
    2022/06/28  01:14             1,561 .gitignore
    2022/06/28  01:14             6,426 BUILD.bazel
    2022/06/28  01:14              ci
    2022/06/28  01:14               860 CMakeLists.txt
    2022/06/28  01:14             5,682 CONTRIBUTING.md
    2022/06/28  01:14             2,261 CONTRIBUTORS
    2022/06/28  01:14              docs
    2022/06/28  01:14              googlemock
    2022/06/28  01:14              googletest
    2022/06/28  01:14             1,475 LICENSE
    2022/06/28  01:14             4,720 README.md
    2022/06/28  01:14             1,770 WORKSPACE
                   9 个文件         24,871 字节
                   7 个目录 848,576,434,176 可用字节
    
    Z:\>mkdir dir_to_build
    
    Z:\>cd dir_to_build
    
    Z:\dir_to_build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    开始编译

    Z:\dir_to_build>cmake ..
    -- Building for: Visual Studio 17 2022
    -- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.19044.
    -- The C compiler identification is MSVC 19.33.31629.0
    -- The CXX compiler identification is MSVC 19.33.31629.0
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.33.31629/bin/Hostx64/x64/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/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.33.31629/bin/Hostx64/x64/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.4") 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: Z:/dir_to_build
    
    Z:\dir_to_build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    不到5秒钟, 这就编译好了

    去Z:\dir_to_build目录看, 已经编译成了VS工程.

    请添加图片描述

    总的工程文件(.sln)就一个, 用vs2022打开, 就可以编译所有googleTest相关的工程了.

    请添加图片描述

    选择ALL_BUILD工程, 选择重新生成.

    已启动重新生成...
    1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------
    1>Checking Build System
    2>------ 已启动全部重新生成: 项目: gtest, 配置: Debug x64 ------
    3>------ 已启动全部重新生成: 项目: gmock_main, 配置: Debug x64 ------
    4>------ 已启动全部重新生成: 项目: gmock, 配置: Debug x64 ------
    2>Building Custom Rule Z:/googletest/CMakeLists.txt
    3>Building Custom Rule Z:/googlemock/CMakeLists.txt
    4>Building Custom Rule Z:/googlemock/CMakeLists.txt
    2>gtest-all.cc
    3>gtest-all.cc
    4>gtest-all.cc
    4>gmock-all.cc
    3>gmock-all.cc
    2>gtest.vcxproj -> Z:\dir_to_build\lib\Debug\gtest.lib
    5>------ 已启动全部重新生成: 项目: gtest_main, 配置: Debug x64 ------
    5>Building Custom Rule Z:/googletest/CMakeLists.txt
    4>正在生成代码...
    3>gmock_main.cc
    5>gtest_main.cc
    3>正在生成代码...
    4>gmock.vcxproj -> Z:\dir_to_build\lib\Debug\gmock.lib
    5>gtest_main.vcxproj -> Z:\dir_to_build\lib\Debug\gtest_main.lib
    3>gmock_main.vcxproj -> Z:\dir_to_build\lib\Debug\gmock_main.lib
    6>------ 已启动全部重新生成: 项目: ALL_BUILD, 配置: Debug x64 ------
    6>Building Custom Rule Z://CMakeLists.txt
    ========== “全部重新生成”: 6 成功,0 失败,0已跳过 ==========
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    从命令行输出的信息可以看到全部生成成功.

    看得到编译出来的库有 : gtest_main.lib, gmock_main.lib, gtest.lib, gmock.lib.

    有了这4个库, 就全了, 可以使用这版的googleTest了.

    安装googleTest

    请添加图片描述

    重新生成INSTALL工程

    已启动重新生成...
    1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------
    1>Checking Build System
    2>------ 已启动全部重新生成: 项目: gtest, 配置: Debug x64 ------
    3>------ 已启动全部重新生成: 项目: gmock_main, 配置: Debug x64 ------
    4>------ 已启动全部重新生成: 项目: gmock, 配置: Debug x64 ------
    2>Building Custom Rule Z:/googletest/CMakeLists.txt
    3>Building Custom Rule Z:/googlemock/CMakeLists.txt
    4>Building Custom Rule Z:/googlemock/CMakeLists.txt
    2>gtest-all.cc
    3>gtest-all.cc
    4>gtest-all.cc
    4>gmock-all.cc
    3>gmock-all.cc
    2>gtest.vcxproj -> Z:\dir_to_build\lib\Debug\gtest.lib
    5>------ 已启动全部重新生成: 项目: gtest_main, 配置: Debug x64 ------
    4>正在生成代码...
    3>gmock_main.cc
    5>Building Custom Rule Z:/googletest/CMakeLists.txt
    5>gtest_main.cc
    3>正在生成代码...
    4>gmock.vcxproj -> Z:\dir_to_build\lib\Debug\gmock.lib
    5>gtest_main.vcxproj -> Z:\dir_to_build\lib\Debug\gtest_main.lib
    3>gmock_main.vcxproj -> Z:\dir_to_build\lib\Debug\gmock_main.lib
    6>------ 已启动全部重新生成: 项目: ALL_BUILD, 配置: Debug x64 ------
    6>Building Custom Rule Z://CMakeLists.txt
    7>------ 已启动全部重新生成: 项目: INSTALL, 配置: Debug x64 ------
    7>-- Install configuration: "Debug"
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/gmock-actions.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/gmock-cardinalities.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/gmock-function-mocker.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/gmock-matchers.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/gmock-more-actions.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/gmock-more-matchers.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/gmock-nice-strict.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/gmock-spec-builders.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/gmock.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/internal
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/internal/custom
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/internal/custom/gmock-generated-actions.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/internal/custom/gmock-matchers.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/internal/custom/gmock-port.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/internal/custom/README.md
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/internal/gmock-internal-utils.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/internal/gmock-port.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gmock/internal/gmock-pp.h
    7>-- Installing: C:/Program Files (x86)/googletest-distribution/lib/gmock.lib
    7>-- Installing: C:/Program Files (x86)/googletest-distribution/lib/gmock_main.lib
    7>-- Installing: C:/Program Files (x86)/googletest-distribution/lib/gmockpdb_debug_postfix-NOTFOUND.pdb
    7>-- Installing: C:/Program Files (x86)/googletest-distribution/lib/gmock_mainpdb_debug_postfix-NOTFOUND.pdb
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/lib/pkgconfig/gmock.pc
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/lib/pkgconfig/gmock_main.pc
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/lib/cmake/GTest/GTestTargets.cmake
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/lib/cmake/GTest/GTestTargets-debug.cmake
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/lib/cmake/GTest/GTestConfigVersion.cmake
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/lib/cmake/GTest/GTestConfig.cmake
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/gtest-assertion-result.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/gtest-death-test.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/gtest-matchers.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/gtest-message.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/gtest-param-test.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/gtest-printers.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/gtest-spi.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/gtest-test-part.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/gtest-typed-test.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/gtest.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/gtest_pred_impl.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/gtest_prod.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal/custom
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal/custom/gtest-port.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal/custom/gtest-printers.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal/custom/gtest.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal/custom/README.md
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal/gtest-death-test-internal.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal/gtest-filepath.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal/gtest-internal.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal/gtest-param-util.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal/gtest-port-arch.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal/gtest-port.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal/gtest-string.h
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/include/gtest/internal/gtest-type-util.h
    7>-- Installing: C:/Program Files (x86)/googletest-distribution/lib/gtest.lib
    7>-- Installing: C:/Program Files (x86)/googletest-distribution/lib/gtest_main.lib
    7>-- Installing: C:/Program Files (x86)/googletest-distribution/lib/gtestpdb_debug_postfix-NOTFOUND.pdb
    7>-- Installing: C:/Program Files (x86)/googletest-distribution/lib/gtest_mainpdb_debug_postfix-NOTFOUND.pdb
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/lib/pkgconfig/gtest.pc
    7>-- Up-to-date: C:/Program Files (x86)/googletest-distribution/lib/pkgconfig/gtest_main.pc
    ========== “全部重新生成”: 7 成功,0 失败,0已跳过 ==========
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94

    可以看到 C:/Program Files (x86)/googletest-distribution/ 目录中有了编译好的干净头文件和库.

    请添加图片描述

    开个工程, 将安装好的库路径和头文件路径包含上, 就可以进行单元测试了.

    googleTest自带的例子

    工程自带例子工程位置 : Z:\googletest\samples

    请添加图片描述

    开个工程, 将这些代码跑一下, 就知道googleTest咋用了.

    这些例子, 展示了googleTest的各种特性.

    简单测试一下googleTest是否可用

    在googleTest自带例子的基础上, 开个工程, 试试googleTest是否可用, 运行的效果.

    新建一个vs2022 控制台的c++工程.

    将预编译头选项去掉.

    注释掉原有的main函数. 将main()换为 int main(void) {return 0;}

    将sample1.h, sample1.cc拷贝到工程目录, 加入当前工程.

    将gTest的头文件路径(C:\Program Files (x86)\googletest-distribution\include)和库路径(C:\Program Files (x86)\googletest-distribution\lib)设置好(工程属性 => C++/ 附加头文件路径, 链接/附加库路径).

    测试工程的编译选项和gTest的编译选项相同(e.g. Debug X64 MTD)

    用记事本打开 sample1_unittest.cc, 将测试用例中有用的部分移植到当前测试工程.

    单元测试的测试代码如下

    
    #include "sample1.h"
    
    #include 
    
    #include "gtest/gtest.h"
    #pragma comment(lib, "gtest.lib")
    
    // Tests factorial of negative numbers.
    TEST(FactorialTest, Negative) {
    	// This test is named "Negative", and belongs to the "FactorialTest"
    	// test case.
    	EXPECT_EQ(1, Factorial(-5));
    	EXPECT_EQ(1, Factorial(-1));
    	EXPECT_GT(Factorial(-10), 0);
    
    	// 
    	//
    	// EXPECT_EQ(expected, actual) is the same as
    	//
    	//   EXPECT_TRUE((expected) == (actual))
    	//
    	// except that it will print both the expected value and the actual
    	// value when the assertion fails.  This is very helpful for
    	// debugging.  Therefore in this case EXPECT_EQ is preferred.
    	//
    	// On the other hand, EXPECT_TRUE accepts any Boolean expression,
    	// and is thus more general.
    	//
    	// 
    }
    
    int main(void)
    {
    	testing::InitGoogleTest(); // must call this before RUN_ALL_TESTS !
    	RUN_ALL_TESTS();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    测试效果

    请添加图片描述

    提示信息的前面都是绿色的, 说明测试都通过了.

    剩下的事情

    看官方例子代码中的用法和说明, 基本就够用了.

    如果对googleTest的哪个用法好奇了, 就迁移到自己测试工程中单独试试这个具体用法.

    END

  • 相关阅读:
    程序员福音,关于如何使用Markdown写出一份漂亮的简历 —— 程序员简历 | md文档简历制作教程
    IS-IS——图解9种报文
    二部图问题
    机器人内部传感器阅读梳理及心得-速度传感器-数字式速度传感器
    Visual Studio 2022 版本 17.4 预览版 3 中对c++编译时优化的内容你都知道吗
    APP 兼容性专项测试
    【API篇】八、Flink窗口函数
    计算机毕业设计Java餐饮类网站(源码+系统+mysql数据库+lw文档)
    Wireshark数据包分析入门
    Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单
  • 原文地址:https://blog.csdn.net/LostSpeed/article/details/126854410