2017-02-15 50 views
2

我有一個主項目與子項目測試。 在項目/的CMakeLists.txt我加如何從我的項目CMakeLists.txt構建gtest靜態庫?

add_subdirectory(tests) 

項目/測試/的CMakeLists.txt我插上 「預編譯」 GTEST庫(從Ubuntu的儲存庫)。我將cd複製到/ usr/src/gtest,並將兩個* .a文件編譯到系統lib目錄中。 它工作正常,直到問題出現在google test FAQ劃出。

如何從項目/ tests/CMakeLists.txt構建gtest靜態庫文件以及如何使用這個新的* .a文件而不是系統文件?

回答

4

Finaly我發現如何在不添加googletest作爲子項目的情況下重建靜態libgtest.a

使用來自this鏈接的信息和從this鏈接的底部。我的項目/測試/的CMakeLists.txt的

有趣的部分:

..... 
# Locate GTest 
#find_package(GTest REQUIRED) 
#include_directories(SYSTEM ${GTEST_INCLUDE_DIRS}) 
set(GTEST_SRC /usr/src/gtest/src/gtest-all.cc) 
include_directories(SYSTEM /usr/src/gtest # <-- path to non-header files from gtest-all.cc 
          /usr/include) # <-- path to gtest headers 

add_library(gtest STATIC ${GTEST_SRC}) # <-- make static library target before main project executable 
target_link_libraries(gtest ${CMAKE_THREAD_LIBS_INIT}) 

# Link runTests with what we want to test and the GTest and pthread library 
add_executable(tests ${SRC}) 
target_link_libraries(tests ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} gtest) # <-- finaly link this library as others 
4

我從頭開始。 首先,從

https://github.com/google/googletest

下載googletest源代碼當我們下載這個ZIP檔案,我們得到了googletest和googlemock項目,但在這裏我將只使用googletest文件夾。我解壓ZIP和googletest文件夾複製到我的項目,如:

/home/name/myProject/ 

從該文件夾的內容可能如下所示:

- CMakeLists.txt 
- googletest/
- main.cpp 

在CMakeList文件,我可以添加GTEST作爲subdir並將其與我的可執行文件相鏈接。我建立一個最小的例子:

cmake_minimum_required(VERSION 2.6.4) 
project(MyProject) 

enable_testing() 
add_subdirectory(googletest) 

# this sets the output dir to /bin 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) 

include_directories(${CMAKE_SOURCE_DIR}/googletest/include) 
add_executable(myExe main.cpp) 
target_link_libraries(myExe gtest_main gtest) 

最後三行設置包含路徑爲googletest,添加可執行文件並將exe鏈接到gtest。
下載GTEST並創建cmake的結構之後,你可以建立你的程序:

$ mkdir bin 
$ cd bin 
$ cmake .. 
$ make 

,並調用EXE:

$ ./myExe 

我希望這將有助於。

+0

這種方式是很有用的太多,但我希望避免googletest子項目。 – Kroll