Кажется, что libgit2 не предоставляет файл конфигурации пакета CMake , поэтому вам нужно написать модуль поиска или найти его в inte rnet. Имеющийся у вас файл Findlibgit2.cmake
- хорошее начало.
Я нашел здесь еще один модуль поиска libgit2: Findlibgit2.cmake . Этот использует pkg-config , используя файл .p c, предоставленный самой libgit2, но, учитывая, что вы используете Windows, вам потребуется установить pkg-config вручную . Это может быть больше проблем, чем оно того стоит.
Относительно вашего сообщения об ошибке:
Если пакет libgit2 не находится в стандартном системном пути, CMake не будет знать, где искать для этого. Итак, вы должны явно указать CMake, где искать. Один простой способ сделать это - изменить файл Findlibgit2.cmake
, используя HINTS
для команд find_*
:
# GIT2_INCLUDE_PATH
find_path(GIT2_INCLUDE_PATH NAMES git2.h
HINTS ${GIT2_INCLUDEDIR}
)
# GIT2_LIBRARY
find_library(GIT2_LIBRARY NAMES git2
HINTS ${GIT2_LIBRARYDIR}
)
Теперь мы можем заполнить эти переменные GIT2_INCLUDEDIR
и GIT2_LIBRARYDIR
, чтобы укажите на установленный пакет libgit2. После этого find_package()
должен успешно найти компоненты пакета, и вы можете создать ссылку на git2.lib
, используя ${GIT2_LIBRARIES}
.
CMakeLists.txt:
<code>cmake_minimum_required(VERSION 2.8.9)
project (backend)
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/")
# Set hints so CMake knows where libgit2 is located on your machine.
set(GIT2_INCLUDEDIR ${CMAKE_CURRENT_LIST_DIR}/libs/libgit2/include)
set(GIT2_LIBRARYDIR ${CMAKE_CURRENT_LIST_DIR}/libs/libgit2/debug/git)
find_package(libgit2 REQUIRED)
include_directories(${GIT2_INCLUDE_DIR})
# Don't need this line. Use of 'link_directories' is <b>discouraged</b>.
<s>link_directories("backend/libs/libgit2/debug")</s>
add_executable(backend main.cpp)
# Add this line to link against the libgit2 libraries.
target_link_libraries(backend PRIVATE ${GIT2_LIBRARIES})
Более переносимый способ установить эти HINTS
переменные - вместо этого установить их при вызове cmake
в командной строке:
cmake -DGIT2_INCLUDEDIR=C:/path/to/libgit2/include -DGIT2_LIBRARYDIR=D:/path/to/libgit2/lib ..
Таким образом, если у вас есть другие разработчики, работающие с проектом, они могут указывать на то место, где у них может быть установлена libgit2 на их компьютере, что устраняет необходимость изменять файл CMakeLists.txt.