Cmakelists配置多級目錄的gtest項目(項目代碼和測試代碼分離)

 cmake一些語法定義

之前的博客主要寫了怎麼配置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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章