从零起步:CMake基础入门与跨平台编译实战

张开发
2026/4/18 14:13:56 15 分钟阅读

分享文章

从零起步:CMake基础入门与跨平台编译实战
从零起步CMake基础入门与跨平台编译实战 前置准备打好CMake入门的基础 项目目录规划简洁至上便于管理✍️ 编写基础源码极简Hello World版C程序 核心配置编写CMakeLists.txt文件 文件名规则大小写不敏感但有最佳实践 基础语法配置三步完成最简CMakeLists.txt逐行解析核心配置 跨平台编译计划多平台验证看CMake的跨平台能力 入门小结CMake基础核心就是这么简单✨ 前言CMake作为跨平台的构建工具凭借其灵活的语法和强大的跨平台适配能力成为C/C开发中编译构建的核心工具。无需依赖复杂的工程配置仅通过简单的CMakeLists.txt文件就能实现Windows、Linux、macOS多平台的编译适配。本文将从最基础的环境准备开始手把手教你编写第一个CMake项目解锁跨平台编译的入门技巧全程极简实操新手也能轻松上手 前置准备打好CMake入门的基础想要玩转CMake第一步要确保环境搭建到位同时准备好基础的源码文件这是后续所有操作的前提缺一不可。CMake环境校验首先需提前安装CMake工具在终端/命令行输入cmake --version注部分环境为cmake version若能正常显示版本号则说明安装成功。本次实操使用的是3.23版本而第一个基础示例未使用任何CMake新特性因此3.1、3.2等低版本也可正常运行对版本无严格要求。源码文件准备CMake可脱离C/C代码单独运行作为脚本工具使用但日常开发中其核心用途是编译源码。本次入门示例我们准备了first_cmake.cpp源码文件代码内容极简仅实现基础的控制台输出后续会全程手写实现让大家清晰掌握每一个细节。 项目目录规划简洁至上便于管理本次第一个CMake示例为基础入门款无需复杂的目录结构我们将项目编号为101第一章节第一个示例核心源码文件first_cmake.cpp放在src目录下。因暂未涉及库文件关联无需多级目录嵌套独立的简单目录结构足以满足需求后续随着项目复杂度提升会逐步引入树形目录结构让文件管理更规范。这种极简的目录规划既降低了入门的理解成本也能让我们将注意力集中在CMake本身的语法和使用上避免被复杂的目录配置分散精力。✍️ 编写基础源码极简Hello World版C程序一切准备就绪后我们先编写first_cmake.cpp源码使用VS Code、记事本等任意文本编辑工具均可VS Code的自动提示功能能让编写过程更高效。源码的核心需求是实现控制台输出完成一个极简的入口程序代码如下#includeiostreamusingnamespacestd;intmain(){// 第一个CMake测试程序控制台输出核心信息coutfirst CMake test这是我的第一个CMake项目endl;return0;}这段代码仅包含基础的头文件引入、主函数入口和控制台输出无复杂逻辑目的是为了配合CMake完成最基础的编译流程让大家直观看到CMake的编译效果。 核心配置编写CMakeLists.txt文件CMakeLists.txt是CMake的核心配置文件所有的编译规则、项目信息、源码关联都通过该文件定义这也是CMake跨平台编译的关键。接下来我们从文件名规则到具体语法一步步实现基础配置解锁CMake的核心用法。 文件名规则大小写不敏感但有最佳实践CMake对CMakeLists.txt的文件名大小写完全不敏感比如写为cmakelists.txt、CMakeLists.TXT都能被识别甚至在Windows系统中因系统本身对文件名大小写不敏感各种写法无任何区别。但强烈建议按照默认规范书写为CMakeLists.txt原因有二提升可读性行业通用规范其他开发者能快速识别文件用途便于协作开发避免跨平台冲突Linux系统对文件名大小写敏感若多人协作时有人写CMakeLists.txt有人写cmakelists.txt在Linux中会被识别为两个不同文件导致编译报错而Windows中无此问题统一规范可从根源避免该问题。 基础语法配置三步完成最简CMakeLists.txt最简的CMakeLists.txt仅需三步核心配置指定CMake最低版本、定义项目名称、关联源码并构建可执行文件全程无复杂语法新手轻松掌握。以下是完整的配置代码搭配详细注释逐行解析每一个配置的意义。# 注释指定CMake的最低版本要求为3.20 cmake_minimum_required(VERSION 3.20) # 注释定义项目名称为first_cmakeCMake中无空格的字符串可省略双引号 project(first_cmake) # 注释构建可执行文件第一个参数为可执行文件名称第二个参数为关联的源码文件 add_executable(first_cmake src/first_cmake.cpp)逐行解析核心配置指定最低版本cmake_minimum_required(VERSION 3.20)该命令用于设定编译当前项目所需的CMake最低版本本次指定为3.20。这样做的核心好处是版本报错前置当其他开发者拉取项目编译时若其本地CMake版本低于3.20会直接在终端/命令行提示版本不匹配开发者可第一时间升级CMake解决问题若未指定最低版本版本不兼容可能导致编译失败且无明确报错信息排查问题会十分繁琐。同时本地机器可安装多个CMake版本只需切换到指定版本即可编译灵活度拉满。定义项目名称project(first_cmake)project()函数用于定义项目的名称本次项目名称为first_cmake。一个实用的小技巧CMake语法中无空格的字符串可以省略双引号若项目名称包含空格如first cmake demo则必须用双引号包裹project(first cmake demo)这一特性让配置更简洁。项目名称定义后会生成对应的CMake变量后续进阶开发中可直接调用变量避免多次修改项目名称时的繁琐操作本次入门示例为了简洁暂未使用变量。构建可执行文件add_executable(first_cmake src/first_cmake.cpp)add_executable()是构建可执行文件的核心命令参数规则为第一个参数是生成的可执行文件名称可与项目名称一致第二个及后续参数是需要关联的源码文件支持多个源码文件用空格分隔。本次将src目录下的first_cmake.cpp关联到可执行文件CMake会根据该配置将源码编译为指定名称的可执行程序。补充实际开发中若源码文件较多可使用CMake的函数自动查找源码文件无需手动逐个写入而鸿蒙源码开发中要求手动写入所有源码文件名便于精准控制编译流程大家可根据项目需求选择方式。 跨平台编译计划多平台验证看CMake的跨平台能力编写好源码和CMakeLists.txt后即可开始编译操作本次我们将在三大主流平台完成编译验证Windows使用Win11系统可通过VS Code编译也可直接用VS打开CMakeLists.txt文件编译Linux使用Ubuntu 20.04系统通过终端执行CMake编译命令macOS使用最新版本系统适配原生终端编译。就第一个基础示例而言三大平台的编译结果无任何差异因为未涉及到库文件的编译而后续进阶学习动态库、静态库时三大平台的编译规则、生成的库文件格式会存在明显区别这也是CMake跨平台开发中需要重点关注的点后续会专门讲解库文件的跨平台编译技巧。 入门小结CMake基础核心就是这么简单本次从零起步的CMake入门实操核心就是掌握一个核心文件CMakeLists.txt 三步基础配置 跨平台编译思路看似复杂的跨平台编译工具入门阶段的核心内容其实极简。通过本次实操我们不仅完成了第一个CMake项目的编写和配置还掌握了CMake的基础语法、文件名规范、版本指定等实用技巧这些都是后续进阶学习CMake的基础。后续我们会逐步增加项目复杂度讲解库文件编译、变量使用、自动查找源码等进阶内容让大家真正玩转CMake轻松应对跨平台开发的编译需求。CMake的学习遵循由简到繁、边练边学的原则打好基础后后续的进阶内容会水到渠成赶紧动手尝试自己编写第一个CMake项目吧从实操中感受跨平台编译的乐趣

更多文章