环境:Windows,cmake,gcc,g++,CLion

一、下载源码二、解压并构建(我是怎么知道的?)

进入处于解压目录的cmd窗口

输入以下命令cmake以下

使用以下命令构建

100%即构建成功

找到这些东西,复制到CLion项目中,文件结构在后面

我这里是先创建一个gtest目录,在gtest目录下在创建一个lib目录,把libgtest.alibgtest_main.a放进去把源码 googletest目录下的inlclude复制到第一个gtest目录下(使include与lib目录同级)

文件结构

│  CMakeLists.txt ├─.idea                        ├─gtest│  ├─gtest│  │  │  gtest-assertion-result.h│  │  │  gtest-death-test.h│  │  │  gtest-matchers.h│  │  │  gtest-message.h│  │  │  gtest-param-test.h│  │  │  gtest-printers.h│  │  │  gtest-spi.h│  │  │  gtest-test-part.h│  │  │  gtest-typed-test.h│  │  │  gtest.h│  │  │  gtest_pred_impl.h│  │  │  gtest_prod.h│  │  │  │  │  └─internal│  │      │  gtest-death-test-internal.h│  │      │  gtest-filepath.h│  │      │  gtest-internal.h│  │      │  gtest-param-util.h│  │      │  gtest-port-arch.h│  │      │  gtest-port.h│  │      │  gtest-string.h│  │      │  gtest-type-util.h│  │      │  │  │      └─custom│  │              gtest-port.h│  │              gtest-printers.h│  │              gtest.h│  │              README.md│  │              │  └─lib│          libgtest.a│          libgtest_main.a│          ├─include│      add.h│      ├─lib│      ├─src│      add.cpp│      CMakeLists.txt│      └─test    │  CMakeLists.txt    │  test_main.cpp

test目录 存放测试函数和主函数cmake文件:

# 指定可执行文件的生成位置# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)aux_source_directory(. TEST_LIST)# cmake三部曲# 指定头文件-指定库文件-链接# 指定头文件目录include_directories(${PROJECT_SOURCE_DIR}/gtest ${PROJECT_SOURCE_DIR}/include)# 指定静态链接库文件目录link_directories(${PROJECT_SOURCE_DIR}/gtest/lib)# 执行文件add_executable(${PROJECT_NAME} ${TEST_LIST})target_link_libraries(${PROJECT_NAME} gtest gtest_main add)

注意这里在写路径时,必须留一个gtest目录,因为其中的.h文件中引用的都是gtest/***.h,正确示例如下:


如果写到能暴露gtest.h一系列头文件的目录,会产生编译时报错,而这些错误将需要你修改gtest.h一系列头文件的所有#include引入错误示例


原因:

其中原因仔细思考也是很好理解的

src目录 存放被测试的函数cmake文件:

aux_source_directory(. SRC_LIST)#windows系统动态库生成lib文件命令set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)# 添加头文件路径include_directories(${ROJECT_SOURCE_DIR}/include)set(LIBRARY_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/lib")message("start add_library add")add_library(add ${SRC_LIST})message("add_library add finished")

根目录下的cmake文件:

cmake_minimum_required(VERSION 3.23.2)project(WeightGraph)set(CMAKE_C_COMPILER gcc)set(CMAKE_CXX_COMPILER g++)set(CMAKE_CXX_STANDARD 17)add_subdirectory(src)add_subdirectory(test)

include目录 存放头文件用于文件链接add.h

#ifndef WEIGHTGRAPH_ADD_H#define WEIGHTGRAPH_ADD_Hint add(int ,int );#endif //WEIGHTGRAPH_ADD_H

add.cpp

int add(int n1, int n2){    return n1 + n2;}

test_main.cpp

#include #include "add.h"#include "gtest/gtest.h"class TestForAdd : public testing::Test {    void SetUp() {}    void TearDown(){}};TEST_F(TestForAdd,test1){    ASSERT_EQ(12,add(4,8));}TEST_F(TestForAdd,test2){    EXPECT_EQ(5,add(2,3));}TEST_F(TestForAdd,test3){    EXPECT_EQ(4,add(1,2));}int main(int argc, char **argv){    testing::InitGoogleTest(&argc, argv);    return RUN_ALL_TESTS();}

查看README.md

想知道什么就看谁的README.md
根目录没有就看子目录