【问题标题】:How should I link to library dependencies from my git repository?我应该如何从我的 git 存储库链接到库依赖项?
【发布时间】:2020-01-21 00:22:41
【问题描述】:

我在 github 上做了一个项目,它使用了几个库,例如 glew、glm、sdl2 或 sdl2_image。 我通过将它们放在一个名为“external”的文件夹中来使用它们,并使用 CMake 从源代码构建它们。

我的问题是尝试在克隆存储库后立即设置“外部”文件夹,以便用户轻松编译项目。

  • 我可以将外部文件夹按原样存储在我的 github 存储库中,但获取库的新更新会很麻烦,而且我不想让它看起来像是在“窃取所有权”图书馆。而且我真的不想允许对这些文件使用版本控制。
  • 我可以使用 git 子模块来指向我想要的正确提交,但这会使下载变得非常繁重(获取每个 repo 大约是发布 zip 文件夹的 10-20 倍)。而且我并不真的需要版本控制信息,因为我没有处理这些依赖项,也不会进行更改。

我看到的两个合理选项(但不是最佳选择)是下载我自己制作的依赖项的 zip 文件,或者一个接一个地获取依赖项并通过脚本在正确的位置解压缩它们。

但是制作脚本会添加诸如 wget 及其 Windows 等效项之类的依赖项,而且我不知道我可以将 zip 文件存储在哪里,因为 github 似乎没有为其他文件提供存储位置(一个新分支?)。

  • github 是否提供将存储库链接到外部存储库版本的任何方式?
  • 否则,存储与不应属于版本控制的存储库相关的其他文件的好地方是什么?

【问题讨论】:

    标签: git github cmake dependencies


    【解决方案1】:

    这听起来像是FetchContent 的工作:最近的几个脚本应该能够完全按照您的意愿行事。也就是说,从固定 URL 下载已编译的二进制 zip 文件,甚至在给定分支中拉入并构建最新提交。

    FetchContent 尤其有用,因为它在配置时完成所有这些工作,跳过了几个问题,替代方案 ExternalProject 一直对我有用,它只在构建时获取和编译项目。

    来自 FetchContent 上的examples

    include(FetchContent)
    FetchContent_Declare(
      googletest
      GIT_REPOSITORY https://github.com/google/googletest.git
      GIT_TAG        release-1.8.0
    )
    
    FetchContent_MakeAvailable(googletest)
    # you now magically have the googletest cmake targets available 
    # at configuration time and can link against them.
    

    对此的替代方法是使用conan 包管理系统,尽管这涉及更多。

    【讨论】:

    • 非常感谢,这正是我所需要的 :) 非常有用,能够在配置时轻松获取所有内容。该选项超级方便和灵活,允许直接运行 add_subdirectory 或绕过它。
    猜你喜欢
    • 1970-01-01
    • 2016-07-04
    • 2013-09-02
    • 2018-11-14
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 2011-12-12
    相关资源
    最近更新 更多