環境:Windows,cmake,gcc,g++,CLion 一、下載源碼 二、解壓並構建(我是怎麼知道的?) 進入處於解壓目錄的cmd視窗 輸入以下命令cmake以下 使用以下命令構建 100%即構建成功 找到這些東西,複製到CLion項目中,文件結構在後面 我這裡是先創建一個gtest目錄,在g ...
環境: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_H
int add(int ,int );
#endif //WEIGHTGRAPH_ADD_H
add.cpp
int add(int n1, int n2)
{
return n1 + n2;
}
test_main.cpp
#include <iostream>
#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
根目錄沒有就看子目錄