如何从我的项目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
答
我从头开始。 首先,从
下载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
我希望这将有助于。
这种方式是很有用的太多,但我希望避免googletest子项目。 – Kroll