CMake 最小可跑实战:从 0 构建第一个 C++ 可执行程序(C++ 工程入门第二课)
本系列为《CMake 工程化进阶》完整 8 篇体系。本篇目标真正跑通 CMake 的完整构建流程。上一节我们讲清了编译器构建工具构建系统CMake 在工程中的位置这篇开始实战。我们只做一件事用 CMake 构建第一个 C 可执行程序。一、准备一个最小工程创建目录结构MyApp/ main.cpp CMakeLists.txtmain.cpp#include iostream int main() { std::cout Hello CMake! std::endl; return 0; }二、写第一个 CMakeLists.txtcmake_minimum_required(VERSION 3.15) project(MyApp) add_executable(app main.cpp)只有三行核心内容。解释一下1️⃣ cmake_minimum_requiredcmake_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_TYPERelease ..常见值DebugReleaseRelWithDebInfo查看当前类型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说明系统没有安装编译器。Linuxsudo apt install build-essentialMacxcode-select --install八、你现在掌握了什么虽然工程很小但你已经完成第一次 CMake 工程理解 build 分离理解 configure / generate / build 三阶段理解 add_executable这就是 CMake 的最小闭环。九、下一步下一篇我们将升级为多文件工程 include 机制解决最常见的错误“找不到头文件”这才是真正进入工程阶段。下一篇从单文件到多文件工程CMake 中的 include 机制与目录规范C 工程入门第三课

相关新闻

给分库分表的 ShardingSphere 提了个PR,这Bug居然改了

给分库分表的 ShardingSphere 提了个PR,这Bug居然改了

说来惭愧,干了 10 来年程序员,还没有给开源做过任何贡献,以前只知道嘎嘎写,出了问题嘎嘎改,从来没想过提个 PR 去修复他,最近碰到个问题,发现挺简单的,就随手提了个 PR 过去。问题问…

2026/5/17 8:33:05 阅读更多 →
32 图 | 玩转 Spring Cloud Gateway + JWT 登录认证

32 图 | 玩转 Spring Cloud Gateway + JWT 登录认证

前言 上篇我已经讲解了 Spring Cloud 的原理和实战,这次就要结合 JWT 来实现登录认证的功能了。 通过本文你会掌握以下知识点: 如何用认证服务做登录认证。 如何生成 JWT 令牌(Token) 如何用 Gateway 对 Token 验证。 Gateway 如何从 Token 中拿到用…

2026/7/5 17:22:33 阅读更多 →
6000 字 | 16 图,吃透 Spring Cloud Gateway 原理

6000 字 | 16 图,吃透 Spring Cloud Gateway 原理

本篇给大家带来的是微服务框架中非常重要的一个组件:API 网关。前言在 PassJava 项目中,我用到了 Spring Cloud Gateway 作为 API 网关,客户端的所有的请求都是先经过网关,然后再转发到会员微服务、题目微服务等。比如 API 网关和…

2026/7/5 7:38:30 阅读更多 →

最新新闻

你的前端代码打包后究竟经历了什么?

你的前端代码打包后究竟经历了什么?

打包命令执行的一瞬间,构建工具并不会立刻编译代码,第一步永远是读取并整合所有配置规则。构建工具配置读取: 以 Vite 为例,工具会自动查找项目根目录 vite.config.js,读取入口文件、输出目录、打包策略、公共路径等核…

2026/7/6 3:50:11 阅读更多 →
[实例] SPI接口的ADC芯片全通道纯硬件驱动——基于HAL库和TLA2518芯片

[实例] SPI接口的ADC芯片全通道纯硬件驱动——基于HAL库和TLA2518芯片

本次需要通过TI的TL2518芯片进行ADC采样。该芯片为SPI接口,具有八个通道,可以全部配置成AIN进行采样,本次需要探究如何该如何配置才能将芯片的采样率达到最大。1.TLA2158首先要陈列一下该芯片的一些特性,为节省篇幅,此…

2026/7/6 3:48:11 阅读更多 →
【全文系列目录】风控PM记

【全文系列目录】风控PM记

风控PM记 一:风险认知与识别(入门篇) ① 入门第一课:认识风险,了解风控 ② 入门第二课:业务催生风险,常见的业务风险有哪些? ③ 《电商风控入门:我们到底在“防”什…

2026/7/6 3:48:11 阅读更多 →
基于Databricks的企业级AI Agent生产实践:从架构设计到部署运维

基于Databricks的企业级AI Agent生产实践:从架构设计到部署运维

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 如果你正在考虑将AI Agent引入企业生产环境,可能会面临这样的困境:在本地开发环境中跑得飞快的Agent原型&…

2026/7/6 3:42:09 阅读更多 →
飞书卡片表格渲染踩坑记:从 Markdown 到原生 table 组件的迁移实战

飞书卡片表格渲染踩坑记:从 Markdown 到原生 table 组件的迁移实战

背景 团队每日通过飞书推送项目晨报和日报,内容从项目管理平台实时拉取,包含任务统计、进度列表、风险项等多维数据,天然需要表格来承载。 最初的实现方案是飞书消息推送 纯文本,格式简陋,阅读体验差。于是决定升级为…

2026/7/6 3:40:09 阅读更多 →
构建AI毒舌投资人:用Prompt工程验证副业想法的可行性

构建AI毒舌投资人:用Prompt工程验证副业想法的可行性

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在折腾各种 AI 工具时,我发现一个挺有意思的现象:很多人拿到一个强大的 AI 模型,比如 DeepSee…

2026/7/6 3:40:09 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻