1.CMake特性

为啥使用cmake

CMake是一个用于软件项目的开源构建系统生成器,它允许开发人员以简单、可移植的文本文件格式指定构建参数。然后,CMake使用该文件为本地构建工具生成项目文件。CMake 以简单的方式处理构建软件的困难方面,例如跨平台构建、系统自省和用户自定义构建,使用户可以轻松地为复杂的硬件和软件系统定制构建。
对于任何项目,尤其是跨平台项目,都需要一个统一的构建系统。CMake 通过将这些不同的操作合并为一种简单、易于理解的文件格式来解决这个问题。
如果您有多个开发人员在一个项目或多个目标平台上工作,那么该软件将必须在不止一台计算机上构建。鉴于设置现代计算机涉及广泛的已安装软件和自定义选项,运行相同操作系统的两台计算机可能会略有不同。CMake 提供了许多 单平台、多机开发环境的优势,包括:

  • 自动搜索正在构建的软件可能需要的程序、库和头文件的能力。这包括在搜索时考虑环境变量和 Window 的注册表设置的能力
  • 在源代码树之外构建目录树的能力。这允许开发人员删除整个构建目录,而不必担心删除源文件。
  • 能够为自动生成的文件(例如QT的 moc() 或SWIG包装器生成器)创建复杂的自定义命令。这些命令用于在构建过程中生成新的源文件,这些文件又被编译到软件中。
  • 在配置时选择可选组件的能力。例如VTK的几个库是可选的,CMake 为用户提供了一种简单的方法来选择构建哪些库。
  • 在简单的文本文件自动生成工作区和项目的能力。这对于具有许多程序或测试用例的系统来说非常方便,每个程序或测试用例都需要一个单独的项目文件,通常是使用 IDE 创建一个乏味的手动过程。
  • 在静态和共享构建之间轻松切换的能力。CMake 知道如何在所有支持的平台上创建共享库和模块。处理复杂的特定于平台的链接器标志,并且许多 UNIX 系统都支持诸如共享库的内置运行时搜索路径之类的高级功能
  • 在大多数平台上自动生成文件依赖项并支持并行构建。

在开发跨平台软件时,CMake 提供了许多附加功能:

  • 测试机器字节顺序和其他硬件特定特征的能力。
  • 一组适用于所有平台的构建配置文件。这避免了开发人员必须在项目中以多种不同格式维护相同信息的问题。
  • 支持在所有支持它的平台上构建共享库。
  • 使用系统相关信息配置文件的能力,例如数据文件的位置和其他信息。CMake 可以创建包含诸如数据文件的路径等信息的头文件以及以#define 宏的形式提供的其他信息。系统特定的标志也可以放在配置的头文件中。这比编译器的命令行选项具有优势-D,因为它允许其他构建系统使用 CMake 构建库,而无需指定在构建期间使用的完全相同的命令行选项。

CMake的历史

自 1999 年以来,CMake 一直处于积极开发阶段,并且已经成熟到可以解决各种构建问题的成熟解决方案。CMake 的开发始于美国国家医学图书馆资助的Insight Toolkit (ITK)的一部分。ITK 是一个大型软件项目,可以在许多平台上运行,并且可以与许多其他软件包进行交互。为了支持这一点,需要一个功能强大但易于使用的构建工具。过去曾为大型项目使用过构建系统,开发人员设计了 CMake 来满足这些需求。从那时起,CMake 越来越受欢迎,许多项目和开发人员都采用它,因为它易于使用和灵活。最有说服力的例子是成功采用 CMake 作为构建系统K 桌面环境 (KDE),可以说是现存最大的开源软件项目。
CMake 还包括 CTest 形式的软件测试支持。测试软件过程的一部分包括构建软件,可能安装它,以及确定软件的哪些部分适合当前系统。这使得 CTest 成为 CMake 的逻辑扩展,因为它已经拥有大部分此类信息。同样,CMake 包含 CPack,它旨在支持软件的跨平台分发。它提供了一种跨平台的方法来为您的软件创建本机安装,利用现有的流行包,如 WiX、RPM、Cygwin 和 PackageMaker。
Make 将继续跟踪和支持可用的流行构建工具。CMake 迅速为微软的 Visual Studio 和苹果的 Xcode IDE 的新版本提供了支持。此外,CMake 还添加了对来自 Google 的新构建工具 Ninja 的支持。使用 CMake,一旦您编写了输入文件,您就可以免费获得对新编译器和构建系统的支持,因为对它们的支持内置于 CMake 的新版本中,并且与您的软件分发无关。CMake 还持续支持交叉编译到其他操作系统或嵌入式设备。CMake 中的大多数命令在交叉编译时都能正确处理主机系统和目标平台之间的差异。

为啥不适用autoconf

在开发 CMake 之前,它的作者对现有的可用构建工具集有经验。Autoconf 与 Automake 相结合提供了一些与 CMake 相同的功能,但要在 Windows 平台上使用这些工具,需要安装许多 Windows 机器上没有的附加工具。除了需要大量工具之外,autoconf 可能难以使用或扩展,并且无法执行 CMake 中容易执行的一些任务。即使您确实在系统上运行了 autoconf 及其所需的环境,它也会生成 Makefile 以强制用户使用命令行。另一方面,CMake 提供了一种选择,允许开发人员生成可以直接从 Windows 和 Xcode 开发人员习惯的 IDE 使用的项目文件。
虽然 autoconf 支持用户指定的选项,但它不支持一个选项依赖于另一个属性或选择的依赖选项。例如,在 CMake 中,您可以有一个用户选项,让多线程取决于首先确定用户的系统是否支持多线程。CMake 提供了一个交互式用户界面,使用户可以轻松查看哪些选项可用以及如何设置它们。
对于 UNIX 用户,CMake 还提供了 autoconf 不直接完成的自动依赖生成。CMake 的简单输入格式也比 Makefile.in 和 configure.in 文件的组合更易于阅读和维护。CMake 记忆和链接库依赖信息的能力在 autoconf/automake 中是没有的。

为啥不使用JAM,qmake,SCons或ANT

ANT、qmake、SCons 和 JAM 等其他工具采用不同的方法来解决这些问题,它们帮助我们塑造了 CMake。在这四个中,qmake 与 CMake 最相似,尽管它缺少 CMake 提供的大部分系统询问。Qmake 的输入格式更接近于传统的 Makefile。ANT、JAM 和 SCons 也是跨平台的,尽管它们不支持生成本机项目文件。它们确实摆脱了传统的面向 Makefile 的输入,使用 ANT 使用 XML;JAM 使用自己的语言;和 SCons 使用 Python。其中许多工具直接运行编译器,而不是让系统的构建过程执行该任务。其中许多工具需要安装其他工具(例如 Python 或 Java)才能运行。

为什么不自己编写脚本

一些项目使用现有的脚本语言(例如 Perl 或 Python)来配置构建过程。虽然类似的系统可以实现类似的功能,但过度使用这些工具会使构建过程更像是寻找复活节彩蛋,而不是简单易用的构建系统。在构建您的软件包时,用户必须在开始构建过程之前找到并安装此版本的 4.3.2 和该版本的 3.2.4。为了避免这个问题,决定 CMake 需要的工具不超过它用于构建的软件所需的工具。使用 CMake 至少需要 C 编译器、该编译器的本机构建工具和 CMake 可执行文件。CMake 是用 C++ 编写的,只需要一个 C++ 编译器即可构建,并且预编译的二进制文件可用于大多数系统。

CMake可以在那些平台上运行

CMake 可在多种平台上运行,包括 Microsoft Windows、Apple Mac OS X 和大多数 UNIX 或类 UNIX 平台。同样,CMake 支持最常见的编译器。

CMake有多稳定?

在为项目采用任何新技术或工具之前,开发人员会想知道该工具的支持和流行程度。自从最初的 CMake 实施以来,CMake 作为构建工具越来越受欢迎。开发人员和用户社区都在继续增长。CMake 继续开发对可用的新构建技术和工具的支持。CMake 开发团队对向后兼容性有着坚定的承诺。如果 CMake 可以构建您的项目一次,它应该始终能够构建您的项目。此外,由于 CMake 是一个开源项目,源代码始终可供项目根据需要进行编辑和修补。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值