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[])
{// 初始化 gtesttesting::InitGoogleTest(&argc,argv);return RUN_ALL_TESTS();
}]=])
然后下载
# 使用fetchcontent 下载安装google test
include(FetchContent)# 下载代码
FetchContent_Declare(googletestGIT_REPOSITORY https://github.com/google/googletest.gitGIT_TAG release-1.12.1
)# cdn
# FetchContent_Declare(
# googletest
# URL http://cdn.tarsyun.com/src/release-1.11.0.tar.gz
# )
使用cmake下载,需要用到FetchContent 这个包,然后提供了两种方式
- github
- 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_fetchGTest::gtest_main
)
然后 关联googletest
# 联合ctest和gtestinclude(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 buildmessage("tar xf gtest-1.11.0.tar.gz")execute_process(COMMAND ${CMAKE_COMMAND}-E tar xf ${CMAKE_SOURCE_DIR}/gtest-1.11.0.tar.gzWORKING_DIRECTORY ${PROJECT_BINARY_DIR})# cmake 配置 cmake -S . -B buildset(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 ->linuxmessage("${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仓库找到;如有疑问留言或加群咨询。