CMake 教程(一)初识 CMake


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> 有如下选项:

  • WIN32WIN32 选项用于指定生成的项目是一个 Windows 应用程序。设置 WIN32 选项后,CMake 会自动将生成的项目配置为一个Windows窗口应用程序,包括引入必要的头文件和库。
  • MACOSX_BUNDLEMACOSX_BUNDLE 选项用于在 Mac OS X 上生成一个应用程序的 BundleBundle 是 Mac 应用程序的一种文件格式,它将可执行文件、资源文件、库文件等打包到一个文件夹中,方便应用程序的部署和分发。
  • EXCLUDE_FROM_ALLEXCLUDE_FROM_ALL 选项用于将某个目标从生成过程中排除。当设置了这个选项后,该目标在执行 make 命令时将不会被构建。

例如:

add_executable(MyProject main.cpp other.cpp)

1.4 实例一——基本使用

前面的函数一时理解不了也没事,先学会用就行了。下面看一个简单的实例,看一下 CMake 是怎么用的。

先写一个简单的 C 程序:

// main.c
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值