2010-10-08 41 views
2

我正在嘗試爲概念驗證構建一個googletest單元測試,作爲我們可能使用的新單元測試框架。在googletest中,有兩種編寫單元測試的方法:用main或者沒有main。如果你沒有定義一個main,你可以鏈接到gtest_main庫,它包含一個main()函數,爲你節省了一些時間。在我的環境中,我們使用Jam來構建二進制文件。我已經通過使用libgtest庫在代碼&中得到了使用main()編譯的二進制文件,但是我正在尋找如何在沒有main的情況下在Jam中構建它。如何使用帶有Jam的gtest_main庫構建googletest單元測試?

基本情況(帶有main()函數):

我能夠建立與此二進制:

Main MyUnitTestBinary : MyClass.cpp ; 
LinkLibraries MyUnitTestBinary : libgtest ; 
Library libgtest : $(GTEST_DIR)/src/gtest-all.cc ; 

破碎的情況下(沒有main()函數):

我不能用這個建立一個二進制文件。我看到許多錯誤,當我試圖將對象鏈接:

Main sample1_unittest : sample1.cc sample1_unittest.cc ; 
LinkLibraries sample1_unittest : gtest_main ; 
Library gtest_main : $(GTEST_DIR)/src/gtest_main.cc ; 

我得到有關未定義的引用等等許多鏈接器錯誤。未定義的引用似乎來自testing :: internal命名空間,它不是我的代碼的一部分。

想法如何攻擊這個問題,或者尋找更多關於這個問題的線索?

回答

5

我找到了答案!我錯誤地沒有將libgtest和gtest_main添加到二進制文件中。我認爲gtest_main還包含了框架的定義,並且您需要鏈接其中一個或另一個。事實上,你總是需要鏈接libgtest,並且只有當你不想改變標準main()函數時,你才需要鏈接gtest_main。

所以......正確答案是補充:

LinkLibraries sample1_unittest : libgtest gtest_main ; 
Library libgtest : $(GTEST_DIR)/src/gtest-all.cc ; 
+0

我也越來越鏈接錯誤「GTEST未定義的引用regfreeA」和「GTEST未定義參考regexecA」。感謝您發佈您的解決方案! – pmont 2013-06-24 20:17:03