2017-02-15 16 views
2

У меня есть основной проект с подпроектом тестов. В проекте/CMakeLists.txt Я добавилКак создать gtest статическую библиотеку из моего проекта CMakeLists.txt?

add_subdirectory(tests) 

В проекта/тесты/CMakeLists.txt Подключенный "предварительно скомпилированных" GTEST библиотеки (из репозитория Ubuntu). I cd в/usr/src/gtest и скомпилировать два файла * .a в системный каталог lib. И он отлично работает, пока не появился номер, записанный в google test FAQ.

Как создать файлы статической библиотеки gtest от project/tests/CMakeLists.txt и как использовать новые * .a-файлы вместо системных?

ответ

4

Окончание Я узнаю, как перестроить статический libgtest.a без добавления googletest в качестве подпроекта.

Использование информации от 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

Я начинаю с самого начала. Во-первых, загрузите исходный код googletest из

https://github.com/google/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, добавьте исполняемый файл и связать ех против GTEST.
После загрузки GTEST и создания структуры CMake, вы можете построить программировать:

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

и вызовите ехе:

$ ./myExe 

Я надеюсь, что это поможет.

+0

Этот способ тоже полезны, но я хотел бы избежать googletest подпроект. – Kroll