如何处理跨平台C++项目中的依赖关系?

6
这是我看到的自动处理跨平台项目中外部库的方法:
  • 将编译好的二进制文件添加到代码仓库中(这种方式不起作用,因为平台和构建配置会有所不同,并且可能出现新的环境)。
  • 编写下载脚本来从互联网获取源代码。可以考虑从Github或者通过HTTP从项目的网站克隆库(下载链接更改时会出现问题。此外,我不知道如何自动构建所有库)。
  • 将所有依赖项的源代码放入代码仓库中或者作为子仓库。 (问题仍然是要找到一种自动化编译它们的方法。此外需要大量存储空间)。
在跨平台的C++项目中,如何处理外部库?许多大型项目都已经形成了工作流程,如果还没有,你可以根据哪些标准来选择合理的方式?

1
“有许多大型跨平台项目存在,必然会出现标准工作流程。” -- 有趣。 - Benjamin Lindley
@BenjaminLindley 请澄清一下,因为我在这个领域没有经验。你似乎对此有些了解,所以你可以帮助我。 - danijar
1
我只是在笑这个假设,即有一个标准的工作流程。但实际上并没有。 - Benjamin Lindley
@BenjaminLindley好的,我已经假定这一点,因为迄今为止没有人回答这个问题。在我看来,软件包管理器是Linux上的一个大优势。然而,我仍然希望有人能够回答“[...]基于哪些标准可以决定合理的方法?”。目前,我认真考虑将所有库的源代码都包含在我的存储库中这种有点不规范的解决方案。 - danijar
1
https://dev59.com/qHjZa4cB1Zd3GeqPeHE3 - user2288008
1
七年过去了,这个问题仍然没有一个真正的答案,是吗? - eclmist
2个回答

0

这个问题比较老,所以我不确定在提问时有什么可用的。然而,现在有跨平台的C++包管理器。

VCPKG是微软的开源解决方案,可以很好地与Visual Studio和Visual Studio Code集成,但并不需要它们。如果你想使用CMake而不是MSBuild,它也可以与CMake集成来进行下载/构建。

Conan是另一个相当成熟的开源解决方案。引用主页上的话:

它适用于所有操作系统,包括Windows、Linux、OSX、FreeBSD等,并且可以针对任何平台进行定位,包括桌面、服务器和移动设备(Android和iOS),以及嵌入式和裸机设备。它可以与其他工具集成,如Docker、MinGW、WSL,以及所有构建系统,如CMake、MSBuild、Makefiles、Meson、SCons。它甚至可以与任何专有构建系统集成。

另一种管理事物的方式,而不是将代码构建到您的源代码库中,是通过git子模块来完成。您的构建系统需要跨平台工作,但这样做可以获得非常细粒度的版本控制控制,以及一个很好的升级路径,而不会在您的存储库中混杂其他人的代码。例如,我已经使用它来处理仅包含头文件的库,这些库不要求我考虑源提供者使用的构建系统。

-5

尝试CMAKE

CMake是一个跨平台、开源的构建系统。CMake是一系列用于构建、测试和打包软件的工具。使用简单的平台和编译器无关的配置文件,CMake用于控制软件编译过程。CMake生成本地的makefile和工作区,可在您选择的编译器环境中使用。


1
我知道Cmake,所以我在问题中标记了它。但它似乎并不能直接解决如何最好地处理第三方依赖的问题。 - danijar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接