环境:Windows,cmake,gcc,g++,CLion
一、下载源码二、解压并构建(我是怎么知道的?)
进入处于解压目录的cmd窗口
输入以下命令cmake以下
使用以下命令构建
100%即构建成功
找到这些东西,复制到CLion项目中,文件结构在后面
我这里是先创建一个gtest目录,在gtest目录下在创建一个lib目录,把libgtest.a
和libgtest_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
根目录没有就看子目录