如何在项目中引入googtest(下)——通过CMake引入库

简介: 如何在项目中引入googtest(下)——通过CMake引入库

一、书接上回

上篇文章参考链接🔗通过编译器引入gtest 我们不妨回顾一下:
| 编译器引入gtest需要:静态库.lib文件、inlucde头文件 |
|--|
| 1.将头文件“目录”链接入项目|
| 2.将静态lib或动态dll库“目录”链接入项目|
| 3.告诉编译器有那几个库|

其实我们通过CMake引入动态库也只需要这三板斧,当然作为初学者,记住的只是表像,如果要深入理解这些库链接啥的一定要好好阅读《程序员的自我修养》。话不多说,直接开搞。

二、新建工程项目

当然我们需要提前准备好 "头文件" 以及编译好的 gtest静态库 具体操作可参考:🔗通过编译器引入gtest

2.1 文件结构

在这里插入图片描述

2.2 编写CMakeLists

首先引入CMakeLists的基础内容:

#设置cmake的最低版本
cmake_minimum_required(VERSION 3.10)
# 设置工程的名称
project(logic)
# 将源代码添加到工程生成可执行文件
add_executable(logic main.cpp)

通过VS2022打开CMakeList:
在这里插入图片描述

三、 通过CMakeLists使用链接三板斧

参考🔗爱编程的大丙

3.1 将头文件“目录”链接入项目

在编译项目源文件的时候,很多时候都需要将源文件对应的头文件路径指定出来,这样才能保证在编译过程中编译器能够找到这些头文件,并顺利通过编译。
include_directories(test/include)

(👁️_👁️)知识扩充:
include_directories()add_subdirectory()的区别:
前者是针对当前CMakeLists的生成项目引入文件夹。
后者是添加CMakeLists的子节点,是以CMakeLists为主题的树的子节点。

3.2 将静态lib或动态dll库“目录”链接入项目

link_directories() 是用来指定要链接库(静态动态都行)的路径的,如果程序链接的是静态库,也可以使用 include_directories()指定头文件。如果是动态库,请直接使用link_directories()
方法一:使用动态库静态库通用方法
cpp link_directories(test/lib)
方法二:和加入头文件一样
include_directories(test/lib)

3.3 告诉编译器有那几个库

link_libraries([目标] [库名称])
参数 1:指定出要链接的静态库的名字
可以是全名 libxxx.a
也可以是掐头(lib)去尾(.a)之后的名字 xxx
参数 2:静态库的路径

此处必须指定绝对路径

link_libraries(${
   
   CMAKE_CURRENT_SOURCE_DIR}/test/lib/gtestd.lib)
link_libraries(${
   
   CMAKE_CURRENT_SOURCE_DIR}/test/lib/gmockd.lib)

四、遇到问题

参考链接🔗
和我们编译器引入库之后又遇到问题了,库之间编译方式不匹配的问题了,我们再回顾下:
在这里插入图片描述

这四个选项对应的含义如下:
| 选项 |编译方式 |
|--|--|
| 多线程调试Dll (/MDd) |MD_DynamicDebug |
| 多线程Dll (/MD) |MD_DynamicRelease|
| 多线程(/MT) |MD_StaticRelease |
| 多线程(/MTd)(/MDd) |MD_StaticDebug |

#设置默认的编译模式
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")

五、测试代码

#include<iostream>
#include"gtest/gtest.h"
using namespace std;
int main(int argc, char** argv)
{
   
   
    EXPECT_EQ(1 + 1, 2);
    testing::InitGoogleTest(&argc, argv);
    RUN_ALL_TESTS();
    return 0;
}

六、整体CMakeLists.txt

#设置cmake的最低版本
cmake_minimum_required(VERSION 3.10)
# 设置工程的名称
project(logic)

#设置默认的编译模式
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")

#添加 “静态库、库文件”  的文件夹 到该项目中
include_directories(test/include)
include_directories(test/lib)
link_libraries(${
   
   CMAKE_CURRENT_SOURCE_DIR}/test/lib/gtestd.lib)
#将源代码添加到工程
add_executable(logic main.cpp)
相关文章
|
测试技术 程序员 C++
C++单元测试GoogleTest和GoogleMock十分钟快速上手(gtest&gmock)
gtest是Google开源的一个跨平台的(Liunx、Mac OS X、Windows等)的 C++ 单元测试框架,可以帮助程序员测试 C++ 程序的结果预期。它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。另一方面,gmock并不是一个独立的测试框架,而是gtest的辅助框架,主要用于模拟没有实现的类的操作,以便在没有完整类的情况下进行测试。通过配合使用gtest和gmock,开发者可以编写出更为复杂且健壮的C++单元测试。
2087 0
|
JavaScript 前端开发 Java
通过Gtest访问C++静态、私有、保护变量和方法
通过Gtest访问C++静态、私有、保护变量和方法
427 1
|
存储 C++
【C++】Visual Studio C++ 配置并使用gtest(不好用你捶我)
【C++】Visual Studio C++ 配置并使用gtest(不好用你捶我)
|
XML Java Maven
Spring 手动实现Spring底层机制
Spring 第六节 手动实现Spring底层机制 万字详解!
542 32
|
测试技术
[googletest] --- 简易使用教程
[googletest] --- 简易使用教程
1135 0
|
数据采集 前端开发 JavaScript
动态与静态网站抓取的区别:从抓取策略到性能优化
本文详细介绍了动态与静态网站抓取的区别、抓取策略及性能优化技巧,并提供了相关代码示例。静态网站抓取通过简单的HTTP请求和解析库实现,而动态网站则需使用Selenium等工具模拟浏览器执行JavaScript。文章还展示了如何使用代理IP、多线程和合理的请求头设置来提高抓取效率。
595 2
动态与静态网站抓取的区别:从抓取策略到性能优化
|
消息中间件 存储 安全
CMake中FindPackageHandleStandardArgs.cmake文件的作用和用法
CMake中FindPackageHandleStandardArgs.cmake文件的作用和用法
549 2
|
Ubuntu 安全 网络协议
|
缓存 C++ Windows
面向 C++ 的现代 CMake 教程(一)(2)
面向 C++ 的现代 CMake 教程(一)
633 0

热门文章

最新文章