C++的包管理

Mar*_*man 11 c++ package-managers

我在一家公司工作,他们建立了一个由不同开发团队分别开发的组件分开的项目.用C++编写的所有内容.

他们使用了许多共同的库并管理所有这些库,他们创建了一个工具,以某种方式关联项目的版本和库的版本.

问题是市场上是否存在一些已经做到这一点的工具:

我的意思是,如果我去这个工具,我可以下载我们项目的4.0版本,它具有库1的版本4.5和库2的3.4版.如果我点击"下载",我将下载源代码整个(项目+库)项目(或二进制)项目和每个库的具体版本.

例如,如果我想下载公司中另一个开发人员的另一个项目,在不同的版本或平台中使用相同的库,我只需要选择它,并且将使用库1版本5.0和库2 2.5下载项目2,等等上.

在市场上是否有任何工具可以让我创建一些像这样的关系,顺便说一下,用代码仓库连接(在我们的例子中是gitlab)?

我检查了Gradle,柯南,......但他们建立,而不是管理组件之间的"关系".

像这样的东西:

在此输入图像描述

Nor*_*ter 7

CMake提供了足够的功能来在您的构建系统中创建这些类型的关系.不幸的是,您必须使用CMake管理所有项目的构建才能使其正常运行.CMake确实针对Visual Studio以及GCC,Clang和ICC.如果您感兴趣,请继续阅读.

  1. 使用CMake为依赖项目构建构建配置.
  2. 使用ExternalProject命令表示父项目的依赖项.
    • ExternalProject支持Git以及Mecurial,CSV,SVN和直接tarball下载.
    • 您可以在Git中指定确切的提交,标记或分支.
    • 支持通过SSL或基本HTTP进行Git身份验证.
  3. 对父项目运行CMake.所有依赖项都会自动下载和编译.

示例依赖性

ExternalProject_Add(
    Library1
    GIT_REPOSITORY https://git@gitlab.yourdomain.com/repo/library_1.git
    GIT_TAG tag_S.33.91
    HTTP_USERNAME ciserv
    HTTP_PASSWORD Obfusc@t3M3
    CMAKE_ARGS
        -DBUILD_EXAMPLES:BOOL=OFF
        -DBUILD_TESTS:BOOL=OFF
        -DBUILD_DOCS:BOOL=OFF
)
target_link_libraries(MyTarget PRIVATE Library1)
Run Code Online (Sandbox Code Playgroud)

ExternalProject模块中还有其他几个命令可用于在需要时进一步自定义依赖项.