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

时间:2017-02-15 05:26:04

标签: c++ cmake googletest

我有一个主项目,子项目测试。 在 project / CMakeLists.txt 中我添加了

add_subdirectory(tests)

project / tests / CMakeLists.txt 中,我插入“预编译”gtest库(来自Ubuntu存储库)。我 cd 到/ usr / src / gtest并将两个* .a文件编译到系统lib目录中。 它工作正常,直到google test FAQ中出现的问题出现。

如何从 project / tests / CMakeLists.txt 构建gtest静态库文件以及如何使用这个新的* .a文件而不是系统文件?

2 个答案:

答案 0 :(得分:6)

我从头开始。 首先,从

下载googletest源代码
  

https://github.com/google/googletest

当我们下载这个ZIP文件时,我们会获得googletest和googlemock项目,但在这里我只会使用googletest文件夹。我解压缩ZIP并将googletest文件夹复制到我的项目中,例如:

/home/name/myProject/ 

此文件夹中的内容可能如下所示:

- CMakeLists.txt
- googletest /
- main.cpp

在CMakeList文件中,我可以将gtest作为子目录添加,并将我的可执行文件链接到它。我构建了一个最小的例子:

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

我希望这会有所帮助。

答案 1 :(得分:5)

最后,我发现如何在不添加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