之前的博客主要写了怎么配置gtest项目,但是一般项目代码和测试代码并不在一起,所以尝试将代码分离
主要分成三个部分,下面给出demo的分级目录
--gtest_demo
--CMakelists.txt
--src
--------cacl.h
--------cacl.cpp
--------string_util.h
--------string_util.cpp
--------CMakelists.txt
--gtest
--------test_calc.cpp
--------test_string_util.cpp
--------CMakelists.txt
首先先配置根目录下的cmake文件
gtest_demo/CMakelists.txt
# 工程名
set (PROJECT_NAME my-gtest)
PROJECT(${PROJECT_NAME})
message("工程名: " ${PROJECT_NAME})
message("工程目录: " ${PROJECT_SOURCE_DIR})
# 最低版本需求
cmake_minimum_required(VERSION 3.6)
SET(CMAKE_BUILD_TYPE "DEBUG")
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
set (LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
message("编译后可执行程序目录: " ${EXECUTABLE_OUTPUT_PATH})
message("编译后库程序文件目录: " ${LIBRARY_OUTPUT_PATH})
ADD_SUBDIRECTORY(src)
ADD_SUBDIRECTORY(D:/Test-my/gtest/gtest-demo/googletest-release-1.7.0/googletest-release-1.7.0)
ADD_SUBDIRECTORY(gtest) # 此处先注释,原因是一开始没有测试工程
#这个必须放在project的后面
IF(MSVC)
message("run here")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
endif()
然后给出src下的文件内容和配置
calc.h
#pragma once
# ifndef __CAlC_H_
# define __CALC_H_
class Calc
{
public:
static int Add(int a, int b);
};
# endif
calc.cpp
# include "calc.h"
#include <iostream>
int Calc::Add(int a, int b)
{
return a+b;
}
string_util.h
# ifndef __KDS_STRING_UTIL_H_
# define __KDS_STRING_UTIL_H_
class StringUtil
{
public:
static int ToInt(const char* str);
};
# endif
string_uitl.cpp 注意一下,我这边名字写错了,后面gtest里面也引用的这个写错的名字,就没改
# include "stdlib.h"
# include "string_util.h"
int StringUtil::ToInt(const char * str)
{
return atol(str);
}
main.cpp
# include <iostream>
# include "calc.h"
# include "string_util.h"
using namespace std;
int main()
{
std::cout<<"3+5="<<Calc::Add(3, 5)<<std::endl;
std::cout<<"ToInt(345)="<<StringUtil::ToInt("345")<<std::endl;
system("PAUSE");
return 0;
}
cmakelists.txt
cmake_minimum_required(VERSION 3.6)
# 打印当前目录
message("源程序工程当前目录: " ${CMAKE_CURRENT_SOURCE_DIR})
# 头文件目录
INCLUDE_DIRECTORIES(
D:/Test-my/gtest/gtest-demo/googletest-release-1.7.0/googletest-release-1.7.0/include
)
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
add_library(src ${DIR_SRCS})
add_executable(src_sult ${DIR_SRCS})
#这个必须放在project的后面
IF(MSVC)
message("run here")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
endif()
然后是gtest的文件和配置
test_calc.cpp
# include <gtest/gtest.h>
# include "src/calc.cpp"
using namespace std;
TEST(Test_Calc, Add)
{
int a=0;
//int a = Calc::Add(3, 5);
EXPECT_TRUE(Calc::Add(2,5)==8);
//EXPECT_TRUE(6==8);
}
test_string_util.cpp
# include <gtest/gtest.h>
# include "src/string_uitl.cpp"
TEST(Test_StringUtil, ToInt)
{
//int b=0;
EXPECT_TRUE(StringUtil::ToInt("345")==345);
}
cmakelists.txt
cmake_minimum_required(VERSION 3.6)
# 打印当前目录
message("测试工程当前目录: " ${CMAKE_CURRENT_SOURCE_DIR})
# 需包含的头文件
INCLUDE_DIRECTORIES(
${PROJECT_SOURCE_DIR}
D:/Test-my/gtest/gtest-demo/googletest-release-1.7.0/googletest-release-1.7.0/include
D:/Test-my/gtest/gtest-demo/googletest-release-1.7.0/googletest-release-1.7.0
)
# 需包含的库文件
link_directories(
${PROJECT_BINARY_DIR}/lib
D:/Test-my/gtest/googletest-release-1.7.0/googletest-release-1.7.0/lib
)
find_package(Threads)
AUX_SOURCE_DIRECTORY(. DIR_SRC_TESTS)
add_executable(test_sult ${DIR_SRC_TESTS})
TARGET_LINK_LIBRARIES(test_sult gtest gtest_main)
TARGET_LINK_LIBRARIES(test_sult ${CMAKE_THREAD_LIBS_INIT})
#这个必须放在project的后面
IF(MSVC)
message("run here")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
endif()
然后这就配置完毕了
接下来生成项目和编译项目以及测试,见我之前写的另一篇博客
https://blog.csdn.net/yysave/article/details/96434908