CMake 和 Make 都是用于构建和编译项目的工具,但它们的作用和用途不同。以下是它们的区别:
- CMake:构建系统生成器
• 用途:CMake 是一个跨平台的构建系统生成器。它不是直接执行编译,而是生成平台特定的构建系统(如 Makefile 或 Visual Studio 项目文件),然后你可以使用相应的工具(如 make、ninja、MSBuild 等)来实际执行构建。
• 功能:
• CMake 用于管理项目的构建过程,生成合适的构建配置文件(例如,Makefile、Ninja 文件或 IDE 项目文件)。
• 你通常会编写一个 CMakeLists.txt 文件,描述项目的构建规则、依赖关系、编译选项等。
• 它支持跨平台的构建,能够生成适用于不同操作系统和工具链的构建文件。比如,你可以在 Linux 上生成 Makefile,在 Windows 上生成 Visual Studio 项目文件。
• 如何工作:
• 你运行 cmake 命令,指定项目的源代码目录,CMake 会根据平台和工具链生成适当的构建系统文件。
• 例如,生成 Makefile:cmake . 或 cmake /path/to/project。
• 示例:
运行 CMake 来生成 Makefile
cmake .
使用生成的 Makefile 进行编译
make
- Make:构建工具
• 用途:make 是一个自动化构建工具,用于根据 Makefile 中的规则自动化编译过程。Make 根据源代码文件的修改时间来决定哪些文件需要重新编译,并执行相应的命令。
• 功能:
• make 依赖于 Makefile 来定义构建规则。Makefile 规定了如何将源文件转换为目标文件,并管理依赖关系。
• 你可以在 Makefile 中定义目标(如编译的可执行文件、库文件等),并为每个目标指定构建步骤(例如,使用 gcc 来编译源文件)。
• 如何工作:
• 你运行 make 命令,它会根据 Makefile 中定义的规则来执行构建命令,检查哪些文件需要更新,并执行相应的操作。
• 示例:
直接使用 make 命令来编译项目
make
-
CMake 与 Make 的关系:
• CMake 生成 Makefile(或其他构建系统的配置文件),然后你使用 Make 来根据生成的 Makefile 进行实际的构建。
• CMake 是构建过程的配置工具,而 Make 是一个实际的构建工具,负责根据 Makefile 执行编译和链接。 -
区别总结:
特性 CMake Make
功能 构建系统生成器,生成构建配置文件 自动化构建工具,使用 Makefile 执行构建
输入 CMakeLists.txt(项目配置文件) Makefile(构建规则文件)
用途 生成平台特定的构建系统(如 Makefile) 根据 Makefile 执行编译和链接
跨平台 支持跨平台,生成不同平台的构建文件 主要用于类 Unix 系统,但也支持 Windows
依赖管理 管理复杂的跨平台依赖关系和构建步骤 基于 Makefile 需要手动管理依赖
常用命令 cmake make
- 结合使用的典型流程:
通常,CMake 和 Make 是配合使用的。在项目中,你通常首先用 CMake 来生成 Makefile,然后再使用 make 来进行实际的编译过程。具体步骤如下:
1. 生成 Makefile:
cmake .
2. 使用 Make 进行构建:
make
这就是 CMake 和 Make 的基本区别和如何配合使用的方式。CMake 更侧重于项目的跨平台配置,而 Make 是一个实际的构建工具。