news 2026/5/24 1:09:14

cmake和makefile

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
cmake和makefile

一、什么是cmake和makefile

简单来说,CMake 是一个用来生成 Makefile 的工具。它们是构建 C/C++ 项目过程中不同层级的工具,通常配合使用,而不是相互替代。

🧱 Makefile:编译的“施工队”

角色: 它是具体的“执行者”。你用一个叫 make 的工具,根据 Makefile 文件里的详细指令,一步步调用编译器(如 gcc )来编译和链接你的代码。
特点: 你需要手动编写所有编译规则。对于小型项目,这很直接;但对于大型项目,规则会变得非常复杂和冗长。
跨平台性: 较弱。同一个项目,如果要在 Windows 和 Linux 上编译,你可能需要写两份完全不同的 Makefile 。

🛠️ CMake:生成 Makefile 的“总设计师”

角色: 它是“生成器”,不是直接编译工具。你写一个更高层次的配置文件 CMakeLists.txt ,描述项目结构、源文件、依赖库等信息。
特点: CMake 会根据你写的 CMakeLists.txt ,自动生成对应平台的 Makefile (在 Linux 上)或 Visual Studio 项目文件(在 Windows 上)。
跨平台性: 非常强。你只需要维护一份 CMakeLists.txt ,就能在不同平台上生成对应的构建文件,真正做到“一处编写,多处运行”。

🔄 它们是如何协作的?

整个工作流程通常是这样的:

编写 CMakeLists.txt : 你定义项目名、版本、源文件、需要的库等。
运行 cmake 命令: CMake 读取 CMakeLists.txt ,并生成当前平台适用的 Makefile (或其他构建文件)。
运行 make 命令: make 工具读取上一步生成的 Makefile ,执行具体的编译和链接操作,最终生成可执行文件。

🤔 我应该学哪个?

Makefile: 更底层,能让你对编译过程有更精细的控制。在一些小型项目或特定的嵌入式开发中,直接写 Makefile 会更直接。
CMake: 对于中大型项目,或者需要跨平台支持的项目,强烈推荐使用 CMake。它能极大地简化构建流程的维护工作,是现代 C/C++ 项目的主流选择。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/24 1:09:11

04-系统技术架构师必备——设计模式在系统架构中的应用

关键词:GoF设计模式、SOLID原则、工厂模式、观察者模式、策略模式、适配器模式、装饰器模式、架构师 设计模式 GoF SOLID原则 系统架构 架构师 面向对象 Java 代码重构 系统技术架构师必备——设计模式在系统架构中的应用 摘要 GoF 23种设计模式是系统技术架构师必须掌握的&…

作者头像 李华
网站建设 2026/5/24 1:07:06

仓储海量货物人车混跑,无感定位并发能力碾压UWB上限瓶颈技术白皮书方案

仓储海量货物人车混跑,无感定位并发能力碾压UWB上限瓶颈技术白皮书方案一、方案概述随着现代智能仓储向高密度、高周转、无人化、集约化模式快速迭代,立体仓储库区普遍形成海量货物堆叠、多叉车穿梭、人员高频作业、人车密集混跑的复杂动态工况。仓储作业…

作者头像 李华
网站建设 2026/5/24 1:03:04

数据科学概述与方法论

数据科学概述与方法论 1. 技术分析 1.1 数据科学概述 数据科学是从数据中提取知识的跨学科领域: 数据科学组成统计学: 数据分析方法机器学习: 预测模型数据工程: 数据处理领域知识: 业务理解数据科学流程:问题定义数据收集数据清洗数据分析模型构建结果部署1.2 CRIS…

作者头像 李华
网站建设 2026/5/24 1:03:00

ES 模块:JavaScript 模块化的标准方案

ES 模块:JavaScript 模块化的标准方案 什么是 ES 模块? ES 模块(ES Modules,简称 ESM)是 ECMAScript 2015(ES6)引入的官方模块化规范。 ES 模块 vs CommonJS 特性CommonJSES Modules加载方式同步…

作者头像 李华
网站建设 2026/5/24 0:57:14

大气层Atmosphere系统深度解析:解锁Switch潜能的终极技术指南

大气层Atmosphere系统深度解析:解锁Switch潜能的终极技术指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable Atmosphere大气层系统作为Nintendo Switch最稳定、功能最丰富的定…

作者头像 李华
网站建设 2026/5/24 0:56:22

LeetCode 930:和相同的二元子数组 | 前缀和与哈希表

LeetCode 930:和相同的二元子数组 | 前缀和与哈希表 引言 和相同的二元子数组(Binary Subarrays With Sum)是 LeetCode 第 930 题,难度为 Medium。题目要求在二元数组(元素只有 0 和 1)中找出子数组和等于 …

作者头像 李华