Code Blocks+gtest環境配置
本文僅介紹Code::Blocks+gtest環境配置,gtest具體使用方法請參考:
玩轉Google開源C++單元測試框架Google Test系列(gtest)(總)
http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html
環境概要
- Code::Blocks 13.12
- Windows 8.1
- gtest-1.7.0
說明
gtest是一個優秀的開源C++單元測試框架,詳細介紹可以參考官方網站。由於某種原因需要在Windows下使用Code::Blocks進行C++開發,特將配置過程進行記錄以備之後查閱。
下載安裝Code::Blocks,官方網址是
下載gtest,官方網站是https://code.google.com/p/googletest/,我下的是gtest-1.7.0.zip版本,下載完成之後進行解壓,我解壓的目錄是E: gtest-1.7.0
下載安裝CMake,CMake是跨平臺的構建工具,官方網站是http://www.cmake.org,我下載的是cmake-3.2.1-win32-x86.exe,安裝之後執行cmake-gui,配置原始碼目錄(之前解壓的gtest目錄)和要build到的目標目錄。可以參考如下截圖,但目錄設定要根據自己的環境進行配置。
單擊Configure,出現如下對話方塊,按照下圖選擇合適選項:
單擊Finish,會在目標目錄產生MinGW Makefiles,之後會出現下圖:
選中gtest_disable_pthreads一項,單擊Generate,即會產生Code::Blocks工程檔案(.cbp)。
用Code::Blocks開啟該檔案,直接進行編譯,會在目標目錄產生兩個庫檔案:
- libgtest.a
- libgtest_main.a
此時gtest的編譯工作就完成了,用Code::Blocks新建工程目錄gtest,在maim.h中寫入如下程式碼:
#include<cstdio> #include<gtest/gtest.h> int add(int a, int b) { return a+b; } TEST(addtest, HandleNoneZeroInput) { EXPECT_EQ(14, add(4, 10)); EXPECT_EQ(-2, add(-3, 1)); } int main(int argc, char *argv[]) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); return 0; }
將gtest原始碼目錄中的include
中的檔案拷貝到工程目錄中的include
資料夾中,將之前build生成的兩個檔案拷貝到工程目錄中的lib
資料夾中。右鍵project
,選擇Build options...
,在Linker settings > Other linker options
下填寫-lgtest
。點選選項卡Search directories
,在Compiler
子選項卡中Add
一項,加入include
目錄,在Linker
子選項卡中Add
一項,加入lib
目錄。點選OK
此時build工程如果成功會出現以下結果:
如果工程中想使用C++11的新特徵,得用命令列引數-std=gnu++11
,而不是-std=c++11
。具體做法是右鍵project
,選擇Build options...
,清除Compiler settings > Compile Flags
下與-std=有關的複選框,點選選項卡Compiler settings > Other options
,在對話方塊中填寫-std=gnu++11
。如果直接使用-std=c++11等選項會出現以下錯誤:
include/gtest/internal/gtest-port.h: In function 'int testing::internal::posix::StrCaseCmp(const char*, const char*)':
include/gtest/internal/gtest-port.h:1719:25: error: '_stricmp' was not declared in this scope
include/gtest/internal/gtest-port.h: In function 'char* testing::internal::posix::StrDup(const char*)':
include/gtest/internal/gtest-port.h:1721:58: error: '_strdup' was not declared in this scope
include/gtest/internal/gtest-port.h: In function 'int testing::internal::posix::FileNo(FILE*)':
include/gtest/internal/gtest-port.h:1729:52: error: '_fileno' was not declared in this scope
include/gtest/internal/gtest-port.h: In function 'FILE* testing::internal::posix::FDOpen(int, const char*)':
include/gtest/internal/gtest-port.h:1779:71: error: 'fdopen' was not declared in this scope
另外,如果你的project的build option中已經清除Compiler settings > Compile Flags下與-std=有關的複選框,但還是出現這個問題,可能原因是你的global設定有問題,你可以檢視Settings->Complier選項卡是否也設定正確,如果沒有請正確設定。