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

5m1hhzi4  于 2023-03-23  发布在  其他
关注(0)|答案(2)|浏览(138)

这是我看到的在跨平台项目中自动处理外部库的方法。(为什么没有跨平台的包管理器?)

*将编译好的二进制文件添加到仓库中。(这不起作用,因为平台和构建配置不同,可能会出现新的环境。)
*编写下载脚本从网上获取源代码,我可以考虑从Github或者项目网站通过HTTP克隆库(当下载链接更改时会中断,而且我不知道如何自动构建所有库)。
*将所有依赖的源代码包含到仓库中,或者作为子仓库。(问题仍然是找到一种自动编译它们的方法。而且它需要大量空间。)

在跨平台C++项目中处理外部库的工作流程是什么?有很多大项目,我想肯定有一个。如果没有,我可以根据什么标准来决定合理的方法?

cgfeq70w

cgfeq70w1#

这个问题已经很老了,所以我不确定当我问这个问题的时候有什么可用的,但是现在,有了C++的跨平台包管理器。
VCPKG是微软的一个开源解决方案,它很好地集成了Visual Studio和Visual Studio Code,但并不需要它们。如果你想使用CMake而不是MSBuild,它还集成了CMake来进行你需要的下载/构建。
Conan是另一个相当成熟的开源解决方案。引用主页:
它适用于所有操作系统,包括Windows、Linux、OSX、FreeBSD和其他操作系统,它可以针对任何平台,包括桌面、服务器和移动的交叉构建(Android和iOS),以及嵌入式和裸机设备。它集成了其他工具,如Docker,MinGW,WSL,以及所有构建系统,如CMake,MSBuild,Makefile,Meson,它甚至可以与任何专有的构建系统集成。
另一种管理东西的方法,而不是将代码构建到源代码库中,是通过git子模块来完成。您的构建系统需要跨平台工作,但这种方式可以获得两个好处:对版本控制进行非常细粒度的控制,沿着一个很好的升级路径,而不会让其他人的代码弄乱您的代码库。例如,我已经将其用于仅限头文件的库。这不需要我考虑源代码提供者使用的构建系统。

5vf7fwbs

5vf7fwbs2#

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

相关问题