我有一个主项目,子项目测试。 在 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文件而不是系统文件?
答案 0 :(得分:6)
我从头开始。 首先,从
下载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 。
我的项目/测试的有趣部分/ 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