目录
CMake
是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不依赖于某特定编译器,并可支持多层目录、多个应用程序与多个函数库。
CMake
通过使用简单的配置文件 CMakeLists.txt
,自动生成不同平台的构建文件(如 Makefile、Ninja 构建文件、Visual Studio 工程文件等),简化了项目的编译和构建过程。
CMake
本身不是构建工具,而是生成构建系统的工具,它生成的构建系统可以使用不同的编译器和工具链。
一、基本使用
最基本的 CMake
项目是从单个源代码文件构建的可执行文件。对于像这样的简单项目,只需要一个包含三个命令的 CMakeLists.txt
文件。
下面是一个 esp32-idf 项目生成的 CMakeLists.txt
文件:
cmake_minimum_required(VERSION 3.16)
include($ENV{
IDF_PATH}/tools/cmake/project.cmake)
project(rmt_ws2812)
下面将从它开始一步步地介绍 CMake 的结构和语法。
1、命令语句
1.1 指定最低版本要求
任何项目的 CMakeLists.txt
都必须首先使用 cmake_minimum_required()
命令指定最低 CMake
版本。这将建立策略设置,并确保以下 CMake
函数与兼容的 CMake
版本一起运行。语法如下:
cmake_minimum_required(VERSION <version>)
就比如上面的 cmake_minimum_required(VERSION 3.16)
。
1.2 定义项目的名称和使用的编程语言
要启动项目,我们使用 project()
命令来设置项目名称。每个项目都需要此调用,并且应在 cmake_minimum_required()
之后立即调用。正如我们稍后将看到的,此命令还可用于指定其他项目级别信息,例如语言或版本号。
project(<project_name> [<language>...])
project(<PROJECT-NAME>
[VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
[DESCRIPTION <project-description-string>]
[HOMEPAGE_URL <url-string>]
[LANGUAGES <language-name>...])
1.3 指定要生成的可执行文件和其源文件
通过 add_executable()
命令,可以告诉 CMake
使用指定的源代码文件创建可执行文件:
add_executable(<target> <options>... <source_files>...)
注意,<name>
对应于逻辑目标名称,并且在项目中必须是全局唯一的。生成的可执行文件的实际文件名是根据本机平台的约定(例如 <name>.exe
或仅 <name>
)构建的。
<options>
有如下选项:
WIN32
:WIN32
选项用于指定生成的项目是一个 Windows 应用程序。设置WIN32
选项后,CMake
会自动将生成的项目配置为一个Windows窗口应用程序,包括引入必要的头文件和库。MACOSX_BUNDLE
:MACOSX_BUNDLE
选项用于在 Mac OS X 上生成一个应用程序的Bundle
。Bundle
是 Mac 应用程序的一种文件格式,它将可执行文件、资源文件、库文件等打包到一个文件夹中,方便应用程序的部署和分发。EXCLUDE_FROM_ALL
:EXCLUDE_FROM_ALL
选项用于将某个目标从生成过程中排除。当设置了这个选项后,该目标在执行 make 命令时将不会被构建。
例如:
add_executable(MyProject main.cpp other.cpp)
1.4 实例一——基本使用
前面的函数一时理解不了也没事,先学会用就行了。下面看一个简单的实例,看一下 CMake 是怎么用的。
先写一个简单的 C 程序:
// main.c