【CMake系列】10-cmake测试集成googletest与第三方库自动化构建

cmake测试,使用ctest 可能不能满足我们的需求,需要我们使用更为强大的第三方测试框架,如googletest,完成项目中的测试工作

本篇文章将第三方测试框架 googletest,引入,同时也可以作为 关于 第三方包 自动化构建的很好示例,值得学习

本专栏的实践代码全部放在 github 上,欢迎 star !!!

如有问题,欢迎留言、或加群【392784757】交流

CMake 下载第三方包

我们引入第三方包,一般正常情况下都是从网络下载得到,通常来源有 github,或 其他镜像地址【对网络更加友好】

接下来,我们将介绍如何通过cmake 完成这一下载操作

首先用cmake file 给出测试文件

file(WRITE gtest_fetch.cpp [=[

#include <gtest/gtest.h>

TEST(MyTest, MyTestDownload)
{
  EXPECT_EQ(7*6,42);
}

TEST(MyTest, MyTestUpload)
{
  EXPECT_EQ(7*6,1);
}

int main(int argc,char* argv[])
{
  // 初始化 gtest
  testing::InitGoogleTest(&argc,argv);
  return RUN_ALL_TESTS();
}

]=])

然后下载

# 使用fetchcontent 下载安装google test
include(FetchContent)

# 下载代码
FetchContent_Declare(
  googletest
  GIT_REPOSITORY https://github.com/google/googletest.git
  GIT_TAG release-1.12.1
)

# cdn
# FetchContent_Declare(
#   googletest
#   URL http://cdn.tarsyun.com/src/release-1.11.0.tar.gz
# )

使用cmake下载,需要用到FetchContent 这个包,然后提供了两种方式

  1. github
  2. cdn url

通过上面的动作,我们可以将网络上的包下载到本地
cmake 也针对下载的包 提供了半自动化的 构建过程

# 编译安装
FetchContent_MakeAvailable(googletest)

然后我们需要去 构建 这个第三方包

cmake -B build -S .
cmake --build build # 这个过程中 同时 完成 googletest 的构建
cmake --install build --prefix=./ --config Debug # linux 不需要 --config Debug

然后到此为止 我们就安装完成,可以添加我们的目标

add_executable(gtest_fetch gtest_fetch.cpp)

# 设置gtest 库 头文件自动推导
target_link_libraries(
  gtest_fetch
  GTest::gtest_main
)

然后 关联googletest

# 联合ctest和gtest

include(GoogleTest)
gtest_discover_tests(gtest_fetch)


# 打开才能运行ctest
enable_testing()

执行 ctest 运行结果如下
在这里插入图片描述
执行 googletest 运行结果如下
在这里插入图片描述

自动化构建

这里自动化构建,也就是 构建第三方过程中 不需要 我们再手工输入指令,而是让cmake 让我们自动执行

也就是让这几个命令实现自动化

cmake -B build -S .
cmake --build build # 这个过程中 同时 完成 googletest 的构建
cmake --install build --prefix=./ --config Debug # linux 不需要 --config Debug

这里给出核心代码

# cmake -E 执行shell
  # PROJECT_BINARY_DIR -B build
  message("tar xf gtest-1.11.0.tar.gz")
  execute_process(COMMAND ${CMAKE_COMMAND}
  -E tar xf ${CMAKE_SOURCE_DIR}/gtest-1.11.0.tar.gz
  WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
  )

  # cmake 配置  cmake -S . -B build
  set(GTEST_SOURCE "${PROJECT_BINARY_DIR}/googletest-release-1.11.0")
  message("${CMAKE_COMMAND} -S ${GTEST_SOURCE} -B ${GTEST_SOURCE}/build")

  execute_process(COMMAND ${CMAKE_COMMAND}
  -S ${GTEST_SOURCE} -B ${GTEST_SOURCE}/build
  )

  # 3 编译gtest ->linux
  message("${CMAKE_COMMAND} --build ${GTEST_SOURCE}/build")
  execute_process(COMMAND ${CMAKE_COMMAND} --build ${GTEST_SOURCE}/build)

  # 安装

  message("${CMAKE_COMMAND} --install ${GTEST_SOURCE}/build --prefix=${GTEST_PATH}")
  execute_process(COMMAND ${CMAKE_COMMAND} --install ${GTEST_SOURCE}/build
  --prefix=${GTEST_PATH} --config Debug
  )

更详细部分,可以去github仓库找到;如有疑问留言或加群咨询。

posted @ 2024-06-12 13:34  蔡不菜和他的uU们  阅读(35)  评论(0编辑  收藏  举报