【问题标题】:How to correctly link libgit2 to C program using cmake?如何使用 cmake 将 libgit2 正确链接到 C 程序?
【发布时间】:2013-10-20 16:03:40
【问题描述】:

首先,我只是 CMake 魔法的新手。我只想以 CMake 方式(FindLibgit2.cmake)将 libgit2 链接到我的简单 C 程序。 据我了解cmake documentation 我的 CMakeLists.txt 应该是这样的:

project(libgit2test)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
# This variables should be setting up externally, i know - i show them just for example
set (LIBGIT2_LIBRARIES "<path to directory with git2.lib and git2.dll")
set (LIBGIT2_INCLUDE_DIR "<path to libgit2/include>")

find_package(Libgit2 REQUIRED)
include_directories(${LIBGIT2_INCLUDE_DIR})
set(LIBS ${LIBS} ${LIBGIT2_LIBRARIES})
target_link_libraries(${PROJECT_NAME} ${LIBS})

在我的简单程序中,我只需调用几个简单的libgit2 函数并得到以下信息: WARNING: Target "libgit2test" requests linking to directory "&lt;libgit2 build directory&gt;". Targets may link only to libraries. CMake is dropping the item.

我认为问题出在:target_link_libraries(${PROJECT_NAME} {$LIBS}) 我尝试将其更改为git2,但我只是得到can not open file。 我做错了什么?

附:我正在使用 Visual Studio 2010 编译器、Qt Creator 创建 CMake 项目,并使用 CMake 成功构建 libgit2

【问题讨论】:

    标签: c windows cmake libgit2


    【解决方案1】:

    删除

    set (LIBGIT2_LIBRARIES "<path to directory with git2.lib and git2.dll")
    set (LIBGIT2_INCLUDE_DIR "<path to libgit2/include>")
    

    这些变量应该由find_package(Libgit2 REQUIRED)设置。

    【讨论】:

    • 我从 CMake 得到这个:“CMake 错误:此项目中使用了以下变量,但它们设置为 NOTFOUND。”
    • 如果您的库/头文件位于自定义路径中,请通过设置 CMAKE_PREFIX_PATH 将 CMake 指向它。
    【解决方案2】:

    我找到了问题的根源:变量LIBGIT2_LIBRARIES 必须指向lib 文件本身,而不是它的目录(调试/发布)。 但是,手动设置此变量看起来像有线。我想找到更多“自动”方式来查找libgit2 - 如果存在的话。

    【讨论】:

    • 使用find_package() 的预期方式是让它自己找到库/头文件。如果您的文件位于某个自定义路径,您应该只给它提示。
    • “提示”是CMAKE_PREFIX_PATH,据我所知。但是如何“要求”CMake 在lib 目录中搜索库二进制文件not?附言感谢您的回答/
    • 你为什么想要这样的东西? CMake 在 ${CMAKE_PREFIX_PATH}/lib${CMAKE_PREFIX_PATH} 中搜索查找库。
    • 您应该单独构建和安装 libgit2 info 自定义前缀 (CMAKE_INSTALL_PREFIX),然后在您的 CMake 项目中将 find_package() 指向它。这是正确的做法。
    • 我宁愿将 libgit 安装到 /home/somewhere 对于 Unix 和 Windows 的任何地方。请注意,在 Windows 应用程序中会自动在其目录和工作目录中查找 .dll,因此您无需将 libgit2.dll 放入 System32 目录。
    猜你喜欢
    • 2011-04-23
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 2017-03-02
    • 2017-01-28
    • 1970-01-01
    相关资源
    最近更新 更多