一、假定你的系統爲centos6系列ios
二、假定你已經安裝了基本的編譯環境,gcc,g++4.4.7git
三、假定你已經設置了環境變量:KDS_MOBILE_STOCK_HOMEgithub
四、假定你已經安裝了unzip解壓縮軟件,若未安裝,請安裝之:yum install zip unzipbootstrap
五、假定你已經安裝了vim,若未安裝可用vi代替vim命令vim
一、下載源碼:http://www.cmake.org/files/v2.8/cmake-2.8.12.tar.gzcentos
二、解壓源碼目錄:tar –xzvf cmake-2.8.12.tar.gz函數
三、進入cmake-2.8.12目錄:cd cmake-2.8.12工具
四、編譯:測試
./bootstrapui
gmake
gmake install
一、下載源碼:https://codeload.github.com/google/googletest/zip/release-1.8.0
二、解壓源碼:unzip googletest-release-1.8.0.zip
三、進入源碼目錄:cd googletest-release-1.8.0
四、建立並進入目錄build:mkdir build && cd build
五、編譯:cmake .. && make
六、將靜態庫拷貝至指定lib目錄:
cp googlemock/gtest/libgtest.a $KDS_MOBILE_STOCK_HOME/3rd-soft/lib/
cp googlemock/gtest/libgtest_main.a $KDS_MOBILE_STOCK_HOME/3rd-soft/lib/
七、將頭文件拷貝至指定include目錄:
cp -ri ../googletest/ $KDS_MOBILE_STOCK_HOME/3rd-soft/include/ mv $KDS_MOBILE_STOCK_HOME/3rd-soft/include/googletest $KDS_MOBILE_STOCK_HOME/3rd-soft/include/googletest1.8.0
創建工程目錄:mkdir gtest_demo && cd gtest_demo
寫最外層CMakeLists.txt:vim CMakeLists.txt
# 工程名 set (PROJECT_NAME my-gtest) PROJECT(${PROJECT_NAME}) SET(CMAKE_C_COMPILER "g++") #選擇編譯器,默認是gcc message("工程名: " ${PROJECT_NAME}) message("工程目錄: " ${PROJECT_SOURCE_DIR}) message("KDS_MOBILE_STOCK_HOME目錄: " $ENV{KDS_MOBILE_STOCK_HOME}) # 最低版本需求 cmake_minimum_required(VERSION 2.8) 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(gtest) # 此處先註釋,緣由是一開始沒有測試工程
一、創建並進入源代碼目錄:mkdir src && cd src
二、完成源代碼文件編寫:
測試文件咱們寫兩個功能,一個爲計算模塊calc,實現Add功能,一個爲字符串模塊string_util,實現將字符串轉爲數字功能
1)、寫calc模塊頭文件:vim calc.h
# ifndef __KDS_CAlC_H_ # define __KDS_CALC_H_ class Calc { public: static int Add(int a, int b); }; # endif
2)、寫calc模塊實現文件:vim calc.cpp
# include "calc.h" int Calc::Add(int a, int b) { return a+b; }
3)、寫string工具模塊頭文件:vim string_util.h
# ifndef __KDS_STRING_UTIL_H_ # define __KDS_STRING_UTIL_H_ class StringUtil { public: static int ToInt(const char* str); }; # endif
4)、寫string工具模塊實現文件:vim string_util.cpp
# include "stdlib.h" # include "string_util.h" int StringUtil::ToInt(const char * str) { return atol(str); }
5)、寫main函數:vim main.cpp
# include <iostream> # include "calc.h" # include "string_util.h" int main() { std::cout<<"3+5="<<Calc::Add(3, 5)<<std::endl; std::cout<<"ToInt(345)="<<StringUtil::ToInt("345")<<std::endl; return 0; }
最後咱們須要將這5個文件編譯
三、寫編譯文件:vim CMakeLists.txt
# 打印當前目錄 message("源程序工程當前目錄: " ${CMAKE_CURRENT_SOURCE_DIR}) # 頭文件目錄 INCLUDE_DIRECTORIES( $ENV{KDS_MOBILE_STOCK_HOME}/3rd-soft/include /usr/local/include/ /usr/include ) AUX_SOURCE_DIRECTORY(. DIR_SRCS) add_library(src ${DIR_SRCS}) add_executable(src_sult ${DIR_SRCS})
至此,源文件已經寫完。
四、驗證:
1)、返回上一層目錄,創建並進入一個臨時的build目錄:cd ../ && mkdir build && cd build
2)、編譯:cmake .. && make
此時能夠看到當前目錄下已經編譯好了src_sult文件,運行之
3)、運行:./src_sult
截圖以下:
一、退出src目錄:cd ..
二、創建並進入gtest測試工程目錄:mkdir gtest && cd gtest
三、寫測試calc代碼:vim test_calc.cpp
# include <gtest/gtest.h> # include "src/calc.h" using namespace std; TEST(Test_Calc, Add) { EXPECT_TRUE(Calc::Add(3,5)==8); }
四、寫測試string_util代碼:vim test_string_util.cpp
# include <gtest/gtest.h> # include "src/string_util.h" using namespace std; TEST(Test_StringUtil, ToInt) { EXPECT_TRUE(StringUtil::ToInt("345")==345); }
五、最後寫CMakeLists.txt文件:vim CMakeLists.txt
# 打印當前目錄 message("測試工程當前目錄: " ${CMAKE_CURRENT_SOURCE_DIR}) # 需包含的頭文件 INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR} $ENV{KDS_MOBILE_STOCK_HOME}/3rd-soft/include/googletest1.8.0/include /usr/local/include /usr/include ) # 需包含的庫文件 link_directories( ${PROJECT_BINARY_DIR}/lib $ENV{KDS_MOBILE_STOCK_HOME}/3rd-soft/lib /usr/local/lib /usr/lib ) find_package(Threads) AUX_SOURCE_DIRECTORY(. DIR_SRC_TESTS) add_executable(test_sult ${DIR_SRC_TESTS}) TARGET_LINK_LIBRARIES(test_sult uuid gtest gtest_main libsrc.a) TARGET_LINK_LIBRARIES(test_sult ${CMAKE_THREAD_LIBS_INIT})
一、回到上一層目錄:cd ..
記得前面最初的CMakeLists.txt中最後一行ADD_SUBDIRECTORY(gtest)被註釋了,把那個#去掉
二、改寫後最終的CMakeLists.txt文件:vim CMakeLists.txt
# 工程名 set (PROJECT_NAME my-gtest) PROJECT(${PROJECT_NAME}) SET(CMAKE_C_COMPILER "g++") #選擇編譯器,默認是gcc message("工程名: " ${PROJECT_NAME}) message("工程目錄: " ${PROJECT_SOURCE_DIR}) message("KDS_MOBILE_STOCK_HOME目錄: " $ENV{KDS_MOBILE_STOCK_HOME}) # 最低版本需求 cmake_minimum_required(VERSION 2.8) 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(gtest)
一、進入build目錄:cd build
二、編譯:cmake .. && make
此時看到當前目錄下已經生成了test_sult測試文件了
三、查看:ls
四、運行之:./test_sult
以下圖所示: