[cmake]cmake引入三方库gtest

很多时候,我们需要在工程中引入第三方库,例如加解密、证书、tls等功能的openssl库。本文以C++开源测试框架库gtest为例介绍如何将该库引入到我们的工程中,并写一个简单的用例来验证。有两种方式将其引入到我们的工程中,一种是将gtest的源码直接与本地工程一起编译构建,一种是将gtest编译成链接库,本地工程引用该库。

在介绍上述两种方式之前,需要先下载gtest的源码,下载方式git clone https://github.com/google/googletest.git

通过源码方式引入

将下载的gtest源码放置到example/gtest/下,工程目录结构为:

example
├── CMakeLists.txt
├── gtest
├── test.cpp

CMakeLists.txt文件内容如下:

CMAKE_MINIMUM_REQUIRED(VERSION 3.22)
PROJECT(example)

ADD_SUBDIRECTORY(gtest) # 新增gtest构建

ADD_EXECUTABLE(test test.cpp)
TARGET_LINK_LIBRARIES(test gtest)

test.cpp文件主要内容为:编写一个测试用例,在main函数中初始化gtest框架并运行所有的用例,文件内容如下:

#include "gtest/gtest.h"

TEST(FirstTest, testcase1)
{
    ASSERT_EQ(1, 1);
}

int main(int argc, char** argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

使用cmake .make命令之后,就会构建出可执行文件test,运行./test结果如下:

$ ./test 
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from FirstTest
[ RUN      ] FirstTest.testcase1
[       OK ] FirstTest.testcase1 (0 ms)
[----------] 1 test from FirstTest (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[  PASSED  ] 1 test.

可见已经成功将gtest引入,通过源码引入的方式好处就是它跟本地工程代码一起编译,出现兼容性问题的可能性很小。

通过链接库的方式引入

使用链接库的方式,需要将源码编译成链接库安装到本地系统,并通过一定方式找到链接库进行引用。

在本地系统编译gtest

依次执行如下命令编译和安装库:

git clone https://github.com/google/googletest.git

cd googletest

mkdir build

cd build

cmake -DCMAKE_INSTALL_PREFIX=/home/gtest ..

make

sudo make install

如果没有错误,会在/home/gtest目录下安装include和lib两个文件,即gtest要用到的头文件和库文件。

在CMake中使用安装的gtest库

CMake中可以通过find_package来查找系统中已经安装的库,具体可以参考find_package简介,我们没有把gtest安装在默认的系统目录,因此还需要指定查找目录,对于本文,搜索路径应该是/home/gtest/lib/cmake/GTest。

CMakeLists.txt文件内容:

CMAKE_MINIMUM_REQUIRED(VERSION 3.22)
PROJECT(example)


FIND_PACKAGE(GTest 
                CONFIG REQUIRED
                PATHS /home/gtest/lib/cmake/GTest)
if (GTest_FOUND)
    ADD_EXECUTABLE(test test.cpp)
    TARGET_LINK_LIBRARIES(test GTest::gtest)
endif()

test.cpp文件内容:

#include "gtest/gtest.h"

TEST(FirstTest, testcase1)
{
    ASSERT_EQ(1, 1);
}

int main(int argc, char** argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

使用cmake .make命令之后,就会构建出可执行文件test,运行./test呈现结果与上小节一致。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FL1768317420

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

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

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

打赏作者

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

抵扣说明:

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

余额充值