目录
一、相关知识点
1. 什么是cmake,为什么使用?
CMake 是一个开源的跨平台构建工具,它能够通过简单的描述文件来生成标准化的构建系统。它的主要目标是简化构建过程,特别是在多平台和多编译器的环境下。CMake 可以自动处理编译器设置、依赖关系、目标生成等任务,避免了手动配置Makefile的复杂性,因为在复杂工程文件中,Makefile的依赖关系难以确定,手动编写复杂性很高。
CMake 的优势之一是支持多种操作系统平台,包括 Windows、Linux 和 macOS,这使得它成为了跨平台开发中不可或缺的工具。简而言之:就是可以根据描述文件CMakeLists.txt来自动生成Makefile文件。
2. 构建过程
CMake 的核心工作是通过一个称为
CMakeLists.txt
的配置文件来定义构建过程。这个文件包含了一些基本的指令,如指定源文件、设置编译选项、定义依赖项等。开发者通过这个文件告诉 CMake 如何构建项目,CMake 根据这些信息自动生成平台特定的构建文件。即:CMake 不需要你手动指定编辑器或编译器,它会根据你所使用的操作系统和编译环境自动选择适合的工具。这是 CMake 的一个非常强大且方便的特性。
具体来说,CMake 会根据系统环境自动识别并选择合适的编译器(如 GCC、Clang、MSVC 等),以及其他构建工具(如 Make、Ninja、Visual Studio 等)。当你运行
cmake
命令时,它会检查你的系统并生成适用于该平台的构建文件。例如:
在 Linux 系统中,CMake 会默认使用
gcc
或clang
作为编译器,并生成适用于make
工具的 Makefile。在 Windows 系统中,CMake 会检查你是否安装了 Visual Studio,并根据环境生成 Visual Studio 的解决方案文件(.sln)。
二、CMake使用流程
1. 创建 CMakeLists.txt
文件
CMake 的核心是
CMakeLists.txt
文件(名称不能随意更改!必须为CMakeLists.txt
),这是用来配置构建过程的脚本。我们需要在项目的根目录下创建一个CMakeLists.txt
文件,内容包含项目名称、编译选项、依赖关系等信息。简单示例如下:
CMakeLists.txt
# 最低 CMake 版本要求:指定项目所需的最低 CMake 版本 cmake_minimum_required(VERSION 3.10) #项目名称 project(MyProject) # 设置C++标准 #set(CMAKE_CXX_STANDARD 11) # 添加可执行文件,将所有相关文件都添加进来,生成可执行程序 add_executable(MyExecutable main.c add.c sub.c test.c)
2. 配置构建目录
CMake 采用外部构建目录的方式,即将构建后的文件放在一个独立的目录中,而不是在源代码目录中。这有助于保持源代码目录的清洁,方便管理不同平台的构建输出。
使用命令:mkdir build,生成build目录。结构目录如下所示:
MyProject/ ├── CMakeLists.txt <-- CMake配置文件 ├── src/ │ └── main.cpp <-- 源代码文件 └── build/ <-- 构建输出目录
3. 运行cmake
进入build目录下,使用命令:cmake .. 运行cmake。其中..表示
CMakeLists.tx
在上级目录中。运行完成后,目录结构如下所示:MyProject/ ├── CMakeLists.txt <-- CMake配置文件 ├── src/ │ └── main.cpp <-- 源代码文件 └── build/ <-- 构建输出目录 ├── CMakeFiles/ <-- CMake生成的构建文件 ├── Makefile <-- 生成的 Makefile 文件 └── (其他构建文件) <-- 构建生成的其他文件
4. 运行make编译
上一步中生成了Makefile文件,那么我们就可以进行程序的编译了。在build目录下使用命令:make进行编译。编译完成后,会在该目录下生成可执行文件,目录结构如下所示:
MyProject/ ├── CMakeLists.txt <-- CMake配置文件 ├── src/ │ └── main.cpp <-- 源代码文件 └── build/ <-- 构建目录 ├── CMakeFiles/ <-- CMake生成的内部文件 ├── Makefile <-- Makefile文件 └── MyExecutable <-- 生成的可执行文件