在具有依赖项的项目中进行协作

问题描述

我是一名 DevOps 工程师,负责为项目创建 CI 流程。我想知道处理以下场景的最佳方法是什么:假设我有一个 C++ 项目(使用 CLion + CMake),有几个开发人员正在处理它。现在为了被构建,该项目有一些它依赖的库。这会自动反映在应该知道在哪里查找这些库的 CMakeLists.txt 文件中。

基本上问题是我们需要注意每个开发人员在他的机器上的正确路径中都有这些库,这是一个很大的麻烦。

处理此问题的一种方法是将这些依赖项保留在存储库中。这很好,因为开发人员所要做的就是克隆 repo,他得到了运行编译所需的一切。但正如我们所知,将二进制文件保存在 SCM 中并不是一个好习惯。

问题是,C++项目中是否有处理项目依赖的好方法

我知道以 C# 为例,我们可以使用 NuGet 包来处理这些场景。因此,我们在 Artifactory 中有一个 NuGet 存储库,用于托管依赖项包,然后在我们的项目中,我们将保留对所需包的引用,在构建时,我们只需下载依赖项并构建项目。 C++ 中有没有类似的东西(我的意思是在 Linux 上运行)?

希望这个问题足够清楚,哈哈,很难用词来表达..

解决方法

这取决于这些依赖项的交付和打包方式。如果维护您的依赖项的人考虑了 CMake,您可能可以使用 find_package。如果他们没有考虑到这一点,但他们支持 pkg-config,您可以使用 FindPkgConfig。现在您需要做的就是让开发人员知道他们需要安装哪些依赖项。无论用于开发的操作系统如何,这都应该有效。

其他解决方案可能涉及在构建项目时拉取和构建依赖项代码(例如,如果可能,通过使用 git 子模块,或 FetchContent,但如果您有很多依赖项,这可能会成为一场噩梦) .

此外,您可以尝试使用诸如 vcpkgconan(如果您的所有依赖项都可用)或 CPM 之类的包管理器。