如何在项目中引入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()
方法一:使用动态库静态库通用方法

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")

注意:/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)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿天堂没有C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值