当前位置: 首页 > news >正文

CMake 最小可跑实战:从 0 构建第一个 C++ 可执行程序(C++ 工程入门第二课)

本系列为《CMake 工程化进阶》完整 8 篇体系。
本篇目标:真正跑通 CMake 的完整构建流程。

上一节我们讲清了:

  • 编译器
  • 构建工具
  • 构建系统
  • CMake 在工程中的位置

这篇开始实战。

我们只做一件事:

用 CMake 构建第一个 C++ 可执行程序。

一、准备一个最小工程

创建目录结构:

MyApp/ main.cpp CMakeLists.txt

main.cpp

#include <iostream> int main() { std::cout << "Hello CMake!" << std::endl; return 0; }

二、写第一个 CMakeLists.txt

cmake_minimum_required(VERSION 3.15) project(MyApp) add_executable(app main.cpp)

只有三行核心内容。

解释一下:

1️⃣ cmake_minimum_required

cmake_minimum_required(VERSION 3.15)

指定最低 CMake 版本。

这是规范写法,必须写。

2️⃣ project()

project(MyApp)

定义工程名称。

它会初始化很多内部变量。

3️⃣ add_executable()

add_executable(app main.cpp)

意思是:

构建一个名为 app 的可执行程序,源文件是 main.cpp。

三、正确的构建方式(非常重要)

不要在源码目录直接运行 cmake。

我们使用:

out-of-source build

也就是源码和构建分离。

第一步:创建 build 目录

mkdir build cd build

第二步:执行配置阶段

cmake ..

含义是:

  • 读取上一级目录的 CMakeLists.txt
  • 生成构建文件

你会看到:

-- Configuring done
-- Generating done
-- Build files have been written to: ...

第三步:构建

推荐方式:

cmake --build .

或者:

make

第四步:运行

./app

输出:

Hello CMake!

四、CMake 构建的三阶段回顾

现在你已经实际走了一遍:

CMakeLists.txt ↓ cmake .. (Configure + Generate) ↓ cmake --build . ↓ app

这就是完整闭环。

五、Debug / Release 模式(基础理解)

Linux 默认是单配置生成器。

如果你想指定构建类型:

cmake -DCMAKE_BUILD_TYPE=Release ..

常见值:

  • Debug
  • Release
  • RelWithDebInfo

查看当前类型:

cat CMakeCache.txt | grep CMAKE_BUILD_TYPE

六、为什么推荐 cmake --build .?

因为它是跨平台写法。

在 Windows 下:

cmake --build .

会调用:

  • MSBuild
  • 或 Ninja

而不是 make。

这是推荐习惯。

七、常见错误

1️⃣ 在源码目录运行 cmake

会污染目录。

解决:

删除生成文件,重新使用 build 目录。


2️⃣ 修改 CMakeLists 后不生效

CMake 有缓存机制。

解决:

删除 build 目录重新 cmake。


3️⃣ 找不到 g++

说明系统没有安装编译器。

Linux:

sudo apt install build-essential

Mac:

xcode-select --install


八、你现在掌握了什么?

虽然工程很小,但你已经完成:

  • 第一次 CMake 工程
  • 理解 build 分离
  • 理解 configure / generate / build 三阶段
  • 理解 add_executable

这就是 CMake 的最小闭环。

九、下一步

下一篇我们将升级为:

多文件工程 + include 机制

解决最常见的错误:

“找不到头文件”

这才是真正进入工程阶段。

下一篇:

从单文件到多文件工程:CMake 中的 include 机制与目录规范(C++ 工程入门第三课)

http://www.jsqmd.com/news/440441/

相关文章:

  • 2026年全国南极磷虾油品牌优选指南 四大品质品牌参考 - 十大品牌榜
  • 奇淫巧技,CompletableFuture 异步多线程是真的优雅
  • 遍历需要取字符串 / 数组下标
  • 支付宝消费券回收价格历史最高多少? - 京顺回收
  • 给分库分表的 ShardingSphere 提了个PR,这Bug居然改了
  • 计算机
  • 分库分表后如何设计索引?全局索引、二级索引
  • SpringCloud + RocketMQ 实现分布式事务,稳的一批
  • LoRA爆了?这篇论文硬核打脸!纯LoRA知识库路线要凉?真相竟是它…(附实验证明)
  • AI大模型卷向超长上下文:从参数规模到上下文长度,谁才是AI智能的关键?
  • OpenClaw火爆出圈!246K星!硬核拆解本地化AI助理架构,企业级Agent架构演进至17层!
  • 收藏!AI大模型时代,产品经理需要了解什么?
  • 2026年湖南浏阳展览模型行业标杆推荐:建筑沙盘模型、道路与桥梁模型、新能源发电模型、核能发电模型、地质地貌模型、浏阳湘东科技展览模型 - 海棠依旧大
  • 2026年 沙盘模型厂家推荐排行榜,房地产/地形地貌/城市区域规划/工业机械/军事/电子数字/农业文旅沙盘,专业定制与视觉创意深度解析 - 品牌企业推荐师(官方)
  • 一文搞懂 AQS (AbstractQueuedSynchronizer 抽象队列同步器 )的原理
  • 湘东科技厂家供应各类仿真展览模型:沙盘模型、锅炉模型、水轮机模型、汽轮机模型、水利水电模型、火力发电模型、发电厂电气模型 - 海棠依旧大
  • MyBatis-配置文件解读及MyBatis为何不用编写Mapper接口的实现类
  • 2026年全国磷虾油品牌优选指南 五大品质品牌参考 - 十大品牌榜
  • Flutter 三方库 jaspr_riverpod 的鸿蒙化适配指南 - 打造全栈响应式架构、Riverpod 状态管理实战、鸿蒙级 Web 开发重器
  • C#文件操作思维导图
  • 2026广东广州天然原矿绿松石五大厂家实力排行榜 - 十大品牌榜
  • 2026年全国高磷脂磷虾油品牌优选指南 五大品质公司参考 - 十大品牌榜
  • 2026年不锈钢管厂家推荐排行榜,304L/316L/2205不锈钢管、焊接/无缝不锈钢管,精选优质耐腐蚀工业管材品牌 - 品牌企业推荐师(官方)
  • 园区综合能源系统的能量管理:一个有趣的小探索
  • 2026年 隔音门厂家推荐排行榜:卧室/医院/实木/室内/极简/酒店/家用/客厅/防火/房间隔音门,专业定制与静音性能深度解析 - 品牌企业推荐师(官方)
  • 2026年广东广州绿松石厂家优选指南 四大品质企业参考 - 十大品牌榜
  • C++ 继承:面向对象的代码复用核心机制
  • 关系到系统上线后的可用性与稳定性。而性能测试报告,作为承载测试结论、问题分析与优化建议的核心输出,决定了性能评估的专业性与决策价值。 ...
  • JDK源码之Object
  • 2026年黑龙江管材推荐厂家:MPP电力保护管、通信管、电力管、给水管、排水管、排污管、塑料管、硅芯管等各类塑料管材 - 海棠依旧大