如何从我的项目CMakeLists.txt构建gtest静态库?

问题描述:

我有一个主项目与子项目测试。 在项目/的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文件而不是系统文件?

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 

我从头开始。 首先,从

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