CMake教程系列-00-简介

时间:2022-09-15 01:24:15


文章目录

  • 1.什么是Cmake
  • 2.cmake能做什么?
  • 3.为什么使用cmake?
  • 4.cmake缺点
  • 5.哪些项目使用cmake更好?
  • 6.学习成本?

1.什么是Cmake

CMake 是一个开源、跨平台的工具,旨在构建、测试和打包您的程序。

  • CMake 用于使用简单的平台和编译器独立配置文件来控制程序编译过程,并生成可在您选择的编译器环境中使用的主机配置文件和项目文件。
  • 这套 CMake 工具由 Kitware 创建,以满足 ITK 和 VTK 等开源项目对强大的跨平台构建环境的需求。

2.cmake能做什么?

cmake仅仅是配置器,而不是编译器。

你需要独立安装编译器,并将编译器名称告诉cmake来使用这些编译器生成二进制。

3.为什么使用cmake?

cmake具有:

  • 编程式的配置
  • 支持跨平台
  • 支持强依赖受控管理
  • 官方提供的依赖查找方式
  • 支持配置分离
  • 支持多种外部调用方式
  • 官方提供多种系统检测接口
  • 支持工具链(Toolchain)以传递配置
  • 官方提供了多种工具链实现
  • 自身具有版本控制及约束功能
  • 等等

4.cmake缺点

  • 文档太差。cmake的文档差是一个公认的问题,那官方文档上连一个具体实例都没有,关键点也不会明确体现出来。很多情况下查了文档,出错,再查文档,再出错,只能全篇看下来,才发现某个角落包含了一句“xx会影响这里的行为”,简直了。
  • 弱变量及未定义的变量导致非预期行为。cmake是一个弱语言,其变量没有具体的类型之分。
    你可以使用某个变量代表一个字符串,也可以代表一个列表。
    而在其他部分使用此变量作为非预期的类型会导致无穷无尽的问题。当然,这是弱语言的共通问题。而在一处使用未被定义的变量更容易发生未预期的行为。
  • 调试困难。cmake官方目前不支持断点调试功能(虽然VS Code中的cmake插件可以,很神奇),所以在写代码时只能通过打印日志方式或者添加额外配置参数来打印所执行的所有代码及行号。

5.哪些项目使用cmake更好?

跨平台的,中大型的,feature多的,模块独立化的,要求依赖关系严格的,均可使用cmake。

6.学习成本?

鉴于cmake官方文档的糟糕程度,确实增加了cmake的学习成本。