概览¶
前面我们学习了如何使用构建系统来构建软件。但是,Linux 上常用的 make
在 Windows 比较少见。而我们在 Windows 上通常都是使用 Dev-C++ 或者 Visual Studio 等 IDE 来编写程序。而且,make
中需要我们手动指定编译器的路径以及各种宏定义等,在跨平台时稍显麻烦。另外,make
提供的功能太过简单,往往需要我们手写大量的代码来完成构建功能。
为了解决跨平台问题以及手写 Makefile
太过繁琐的问题,我们可以使用元构建系统进一步提升构建的效率以及软件的通用性。
元构建系统和构建系统的区别?¶
元构建系统和构建系统不同,它并不直接帮你构建好软件,而是根据平台特性等生成其他构建系统所需的 DSL,例如生成 Makefile。所以,使用元构建系统往往分为两步,第一步调用元构建系统来生成构建文件,第二步调用对应的构建系统生成最终的软件。
另外,元构建系统为了做到跨平台特性,可以自动检测平台差异并配置好相应的宏,不需要我们手动修改 Makefile
等。这样,我们只需要在编写代码的时候适当地使用宏进行条件编译,就能做到一次编写,到处编译了。
依赖管理¶
在编写项目时,我们由于时间和精力原因,不可能什么代码都是自己写,而是会引入其他人编写好的代码库。C++ 诞生之初并没有自带一套标准的依赖管理工具,而是将管理方式的选择权交给了程序员们。而这也导致了各种依赖管理方式的出现,一片混乱。目前比较常见的 C++ 依赖管理办法有:
- 直接下载相应的源代码,编译安装或者复制到自己的代码仓库中
- 使用 Git Submodules 功能,将依赖库加入到自己的代码仓库中
- 使用系统自带的包管理工具,例如
apt
全局安装依赖 - 使用
conan
、vcpkg
等包管理工具 - 使用元构建系统本身的依赖管理
元构建系统一般都会内置以上几种依赖管理的方法。到目前为止,各个 C++ 项目都还没有统一的依赖管理办法,因此,在我们自己编写项目,以及引用他人项目的时候,需要灵活应变,根据对方项目的实际情况和自己项目的情况来选择合适的依赖管理方式。
目前,开源的 C++ 项目通常都会提供 CMakeLists.txt
。