CLion中配置gtest

打印 上一主题 下一主题

主题 931|帖子 931|积分 2793

环境:Windows,cmake,gcc,g++,CLion
一、下载源码

二、解压并构建(我是怎么知道的?)

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

输入以下命令cmake以下

使用以下命令构建

100%即构建成功

找到这些东西,复制到CLion项目中,文件结构在后面
我这里是先创建一个gtest目录,在gtest目录下在创建一个lib目录,把libgtest.a和libgtest_main.a放进去

把源码 googletest目录下的inlclude复制到第一个gtest目录下(使include与lib目录同级)


文件结构
  1. │  CMakeLists.txt
  2. ├─.idea                        
  3. ├─gtest
  4. │  ├─gtest
  5. │  │  │  gtest-assertion-result.h
  6. │  │  │  gtest-death-test.h
  7. │  │  │  gtest-matchers.h
  8. │  │  │  gtest-message.h
  9. │  │  │  gtest-param-test.h
  10. │  │  │  gtest-printers.h
  11. │  │  │  gtest-spi.h
  12. │  │  │  gtest-test-part.h
  13. │  │  │  gtest-typed-test.h
  14. │  │  │  gtest.h
  15. │  │  │  gtest_pred_impl.h
  16. │  │  │  gtest_prod.h
  17. │  │  │  
  18. │  │  └─internal
  19. │  │      │  gtest-death-test-internal.h
  20. │  │      │  gtest-filepath.h
  21. │  │      │  gtest-internal.h
  22. │  │      │  gtest-param-util.h
  23. │  │      │  gtest-port-arch.h
  24. │  │      │  gtest-port.h
  25. │  │      │  gtest-string.h
  26. │  │      │  gtest-type-util.h
  27. │  │      │  
  28. │  │      └─custom
  29. │  │              gtest-port.h
  30. │  │              gtest-printers.h
  31. │  │              gtest.h
  32. │  │              README.md
  33. │  │              
  34. │  └─lib
  35. │          libgtest.a
  36. │          libgtest_main.a
  37. │         
  38. ├─include
  39. │      add.h
  40. │      
  41. ├─lib
  42. │      
  43. ├─src
  44. │      add.cpp
  45. │      CMakeLists.txt
  46. │      
  47. └─test
  48.     │  CMakeLists.txt
  49.     │  test_main.cpp
复制代码
test目录 存放测试函数和主函数

cmake文件:
  1. # 指定可执行文件的生成位置
  2. # set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
  3. aux_source_directory(. TEST_LIST)
  4. # cmake三部曲
  5. # 指定头文件-指定库文件-链接
  6. # 指定头文件目录
  7. include_directories(${PROJECT_SOURCE_DIR}/gtest ${PROJECT_SOURCE_DIR}/include)
  8. # 指定静态链接库文件目录
  9. link_directories(${PROJECT_SOURCE_DIR}/gtest/lib)
  10. # 执行文件
  11. add_executable(${PROJECT_NAME} ${TEST_LIST})
  12. target_link_libraries(${PROJECT_NAME} gtest gtest_main add)
复制代码
注意

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



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

错误示例



原因:


其中原因仔细思考也是很好理解的
src目录 存放被测试的函数

cmake文件:
  1. aux_source_directory(. SRC_LIST)
  2. #windows系统动态库生成lib文件命令
  3. set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
  4. # 添加头文件路径
  5. include_directories(${ROJECT_SOURCE_DIR}/include)
  6. set(LIBRARY_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/lib")
  7. message("start add_library add")
  8. add_library(add ${SRC_LIST})
  9. message("add_library add finished")
复制代码
根目录下的cmake文件:
  1. cmake_minimum_required(VERSION 3.23.2)
  2. project(WeightGraph)
  3. set(CMAKE_C_COMPILER gcc)
  4. set(CMAKE_CXX_COMPILER g++)
  5. set(CMAKE_CXX_STANDARD 17)
  6. add_subdirectory(src)
  7. add_subdirectory(test)
复制代码
include目录 存放头文件用于文件链接

add.h
  1. #ifndef WEIGHTGRAPH_ADD_H
  2. #define WEIGHTGRAPH_ADD_H
  3. int add(int ,int );
  4. #endif //WEIGHTGRAPH_ADD_H
复制代码
add.cpp
  1. int add(int n1, int n2)
  2. {
  3.     return n1 + n2;
  4. }
复制代码
test_main.cpp
  1. #include <iostream>
  2. #include "add.h"
  3. #include "gtest/gtest.h"
  4. class TestForAdd : public testing::Test {
  5.     void SetUp() {}
  6.     void TearDown(){}
  7. };
  8. TEST_F(TestForAdd,test1){
  9.     ASSERT_EQ(12,add(4,8));
  10. }
  11. TEST_F(TestForAdd,test2){
  12.     EXPECT_EQ(5,add(2,3));
  13. }
  14. TEST_F(TestForAdd,test3){
  15.     EXPECT_EQ(4,add(1,2));
  16. }
  17. int main(int argc, char **argv)
  18. {
  19.     testing::InitGoogleTest(&argc, argv);
  20.     return RUN_ALL_TESTS();
  21. }
复制代码
查看README.md

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



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表