test_demo
├── CMakeLists.txt
├── gtest
│ ├── CMakeLists.txt
│ └── gtest.cpp
├── include
│ └── 2dtf
│ ├── 2dtf.cpp
│ └── 2dtf.h
└── src
└── main.cpp
编译后的代码在这,请删除build中的所有文件后使用。
这里主要的难点是cmakelists.txt的书写
#include "../include/2dtf/2dtf.h"
// #include
#include
My_Math m;
TEST(max_num1, max_num) {
double x = 1.0, y = 2.3;
double m1 = x;
if (x <= y) {
m1 = y;
}
//实现glog时需要添加参数,这里没有添加所以先去掉了,没有参与测试20220809/14:33
// google::InitGoogleLogging("");
// LOG(INFO) << "start testing!";
EXPECT_EQ(2.3, m.max_num(x, y));
// google::ShutdownGoogleLogging();
}
#include "2dtf.h"
#include
#include
#include
#include
using namespace std;
double My_Math::max_num(double a, double b) { return a > b ? a : b; }
int My_Math::plus_num(int a, int b) { return a + b; }
int My_Math::muti_num(int a, int b) { return a * b; }
double Transfor_2D(std::vector<Point> &points, double x_s, double y_s,
double angle) {
transform(begin(points), end(points), begin(points), [=](const Point &point) {
double sin_val = sin(angle);
double cos_val = std::cos(angle);
Point trans_point((point.x - x_s) * cos_val + (point.y - y_s) * sin_val,
(point.y - y_s) * cos_val - (point.x - x_s) * sin_val);
return trans_point;
});
return 0.0;
}
#include
#include
#include
#include
#include
class My_Math {
public:
//实现基本加减乘除的内容
double max_num(double a, double b);
int plus_num(int a, int b);
int muti_num(int a, int b);
};
struct Point {
explicit Point() : x(0.0), y(0.0) {}
explicit Point(double x_i, double y_i) : x(x_i), y(y_i) {}
double x;
double y;
};
double Transfor_2D(std::vector<Point> &point, double x_s, double y_s,
double angle);
#include
#include
#include "../include/2dtf/2dtf.h"
using namespace std;
int main() {
My_Math mm;
double x = 1.4, y = 4.55;
int a = 2, b = 10;
cout << "namespace testing!" << endl;
cout << "max_num is: " << mm.max_num(x, y)
<< "plus_num is: " << mm.plus_num(a, b) << endl;
return 0;
}
#最小的要求版本
cmake_minimum_required(VERSION 3.1.0)
#更换目前的项目的名称,后台生成一个文件路径${PROJECT_SOURCE_DIR},cmake所在的文件夹以及${PROJECT_NAME}表示当前的项目名称,这里相当于MyProject
project(MyProject)
#设置c++标准为11
set(CMAKE_CXX_STANDARD 11)
#包含头文件地址,本文文件路径还有另一种写法是include_directories(./include)
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
#给头文件换名字,以后就可以使用${修改后的名字的大写}代替程序进行编译链接等工作
set(MY_PROJECT_SRC
include/2dtf/2dtf.h)
#与上面功能相同
set(2DTF_SRCS include/2dtf/2dtf.cpp)
#添加可执行文件
add_executable(MyProject src/main.cpp ${2DTF_SRCS})
# 开启测试
enable_testing()
# 添加测试目录
add_subdirectory(gtest)
cmake_minimum_required(VERSION 3.10)
project(gtest VERSION 1.0)
# 查找 GTest 库
find_package(GTest REQUIRED)
#find_package(Glog REQUIRED)
# GTest 的头文件
include_directories(./include)
set(2DTF_SRCS ../include/2dtf/2dtf.cpp)
if(GTEST_FOUND)
message("GTest library was found! ")
else(GTEST_FOUND)
message("GTest library is needed but can't be found! ")
endif()
# if(Glog_FOUND)
# message("GLog library was found! ")
# else(Glog_FOUND)
# message("GLog library is needed but can't be found! ")
# endif()
#包含gtest头文件
include_directories(${GTEST_INCLUDE_DIRS})
include_directories(${GLOG_INCLUDE_DIRS})
add_executable(gtest gtest.cpp ${2DTF_SRCS})
# 链接测试库
target_link_libraries(gtest ${GTEST_BOTH_LIBRARIES} pthread )
# 添加到测试,这里会添加到主cmake中
gtest_discover_tests(gtest)
上面的程序写完后,在文件夹test_demo中使用以下命令创建build文件夹以及编译所有文件,最后会在build文件夹生成名为MyProject的可执行文件,在build/gtest文件下生成名为gtest可执行文件。执行的结果如下图:
mkdir build && cd build
cmake .. && make
#首先确定最小版本号
cmake_minimum_required(VERSION 3.10)
#给目前写的工程定义一个名字,后续编译时使用这个名字
#更换目前的项目的名称,后台生成一个文件路径${PROJECT_SOURCE_DIR},cmake所在的文件夹以及${PROJECT_NAME}表示当前的项目名称
project(gtest VERSION 1.0)
# 查找 GTest 库
find_package(GTest REQUIRED)
#find_package(Glog REQUIRED)
#包含使用到的头文件地址,多个地址的时候直接往后添加就可以
include_directories(./include ./best ./better)
#不会写了就直接set,先设置所有源文件,类中的cpp,最后直接放在引用的cpp后面生成可执行文件就可以了
set(2DTF_SRCS ../include/2dtf/2dtf.cpp)
#这里可以输出一部分message,查看是否找到库文件啦,是否设置某些东西啦
if(GTEST_FOUND)
message("GTest library was found! ")
else(GTEST_FOUND)
message("GTest library is needed but can't be found! ")
endif()
# if(Glog_FOUND)
# message("GLog library was found! ")
# else(Glog_FOUND)
# message("GLog library is needed but can't be found! ")
# endif()
#包含库文件头文件
include_directories(${GTEST_INCLUDE_DIRS})
include_directories(${GLOG_INCLUDE_DIRS})
#生成可执行文件
add_executable(gtest gtest.cpp ${2DTF_SRCS})
# 链接测试库
target_link_libraries(gtest ${GTEST_BOTH_LIBRARIES} pthread )
# 单文件夹下的cmnakelists.txt添加到测试
gtest_discover_tests(gtest)
#主文件下的cmnakelists.txt添加
add_subdirectory(gtest)