2016-02-12 3 views
1

Как добавить libgit2 в качестве библиотеки в cmake. Я клонировал репозиторий libgit2 из github. чем я побежалКак включить libgit2 через cmake

mkdir build && cd build 
cmake .. 
make 
sudo make install 

Чем я нашел установленные файлы в/USR/местные/включить/git2/и/USR/местные/включить.

что мне нужно добавить в мой файл cmake?

ответ

1

Вот пример адаптировать его к вашему собственному проекту:

добавить следующие строки в верхней CMakeLists.txt уровня:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") 
find_package(git2 REQUIRED) 
include_directories(${GIT2_INCLUDE_DIR}) 

add_executable(lg2 main.c) # can be add_library, etc. 

target_link_libraries(lg2 ${GIT2_LIBRARIES}) 

Создайте директорию с именем CMake затем создать файл в нем называется Findgit2 .cmake и добавьте к нему следующий:

# Find git2 Library 
# 
# GIT2_INCLUDE_DIRS - where to find git2.h, etc. 
# GIT2_LIBRARIES - List of libraries when using libgit2. 
# GIT2_FOUND  - True if libgit2 is found. 

# GIT2_INCLUDE_PATH 
find_path(GIT2_INCLUDE_PATH NAMES git2.h) 
# GIT2_LIBRARY 
find_library(GIT2_LIBRARY NAMES git2) 

# handle the QUIETLY and REQUIRED arguments and set GIT2_FOUND to TRUE if 
# all listed variables are TRUE 
include(FindPackageHandleStandardArgs) 
find_package_handle_standard_args(libgit2 REQUIRED_VARS GIT2_LIBRARY GIT2_INCLUDE_PATH) 


if (GIT2_FOUND) 
    set(GIT2_INCLUDE_DIR ${GIT2_INCLUDE_PATH}) 
    set(GIT2_INCLUDE_DIRS ${GIT2_INCLUDE_PATH}) 
    set(GIT2_LIBRARIES ${GIT2_LIBRARY}) 
endif() 

mark_as_advanced(
    GIT2_INCLUDE_PATH 
    GIT2_LIBRARY 
) 
+1

ok so with [tag: clion] проверяет «CMakeLists.txt», но при компиляции он дает мне неопределенные ссылки в моем коде:/this this _main.c: 9: неопределенная ссылка на 'giterr_last ' _ [пытается построить general.c из примеров.] ** Любые идеи ..? ** – gideon

1

FWIW я хотел бы построить libgit2 как часть вашего проекта, как это:

# Set libgit2 options (e.g. disable shared lib) 
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) 
... 

# Build libgit2 
add_subdirectory(path/to/libgit2) 

# Add your own exe or library target 
add_executable(my_exe ...) 

# Link libgit2 into your exe or library 
target_link_libraries(my_exe git2 ...) 
+0

К сожалению, функция 'add _ ** sub ** directory()' должна быть относительно пути к проекту, следовательно, имя, любое предложения о том, как обойти это, или было ли ваше предложение скопировать файл 'libgit2.so' в каталог src? – gideon

+0

Нет, мое предложение действительно заключается в том, чтобы скопировать источник libgit2 в ваш проект в качестве подкаталога. В моем случае это также подмодуль git. Возможно, вы захотите посмотреть на модуль cmake ExternalProject, который будет построен за пределами исходного дерева. –

+0

Спасибо за ваш ответ @jason Я действительно не делаю из src build _per se_. [tag: Clion] создает src, и я только что сделал вывод исполняемого файла в подпапку с источником. Я несколько смущен вообще с cmake, в его ответе упоминается подход @ x64architecture, в котором есть 'findxxx.cmake', а затем есть метод' find_package', который использует pkg-config. Pkg-config _way работает для меня с gtk + 3, но не с libgit2 [и да 'pkg-config' знает, где libgit2 находится в моей системе] – gideon

Смежные вопросы