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

Makefile 在 ARM MCU 开发中的编译与链接参数详解与实践


内容大纲

  1. 引言

  2. 一、预处理与宏定义

    1. 头文件搜索路径:-I

    2. 宏定义:-D

  3. 二、编译器选项(CFLAGS)

    1. 架构与指令集:-mcpu-mthumb

    2. 优化与调试:-Os-O2-g

    3. 警告与错误:-Wall-Werror

    4. 代码剥离:-ffunction-sections-fdata-sections

    5. 其他常用选项

  4. 三、链接器选项(LDFLAGS)

    1. 链接脚本:-T

    2. 剔除未用代码:--gc-sections

    3. 生成映射文件:-Wl,-Map=

    4. 库路径与库:-L-l

    5. 半主机与裸机:--specs=nosys.specs

  5. 四、完整 Makefile 示例

  6. 五、实践案例:STM32F103 “点亮 LED”

    1. 硬件说明

    2. 代码结构

    3. Makefile 配置

    4. 编译与下载流程图

  7. 六、图例说明

  8. 七、示例解析

  9. 八、调试与优化建议

  10. 九、小结


引言

在嵌入式开发中,Makefile 作为每个项目的“发动机”,承担了源码编译、链接、打包的重任。对 ARM Cortex-M 系列 MCU(如 STM32、BlueNRG、BluePill 等)来说,合理配置编译器与链接器参数,不仅能缩小固件体积、提升运行效率,也能在调试阶段提供必要的符号信息。本文将以最常用的 arm-none-eabi-gcc 为例,系统梳理预处理、编译器(CFLAGS)和链接器(LDFLAGS)常见选项,并通过 STM32 点亮 LED 的实践案例,加深理解。


一、预处理与宏定义

1.1 头文件搜索路径:-I<路径>

  • 作用:告诉编译器在指定目录中查找 #include "xxx.h" 的头文件。

  • 用法

http://www.xdnf.cn/news/215605.html

相关文章:

  • rsync命令详解与实用案例
  • 【Unity】使用Socket建立客户端和服务端并进行通信的例子
  • 学习笔记:Qlib 量化投资平台框架 — MAIN COMPONENTS Part Ⅱ
  • Spring Boot 缓存机制:从原理到实践
  • HTML 表单
  • vue3+Nest.js项目 部署阿里云
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 16)
  • 三轴云台之镜头解码技术篇
  • 如何提升自我价值?
  • 企业为什么选择浙江电信服务器租用?
  • 服务器和数据库哪一个更重要
  • DPO 与 KTO 的区别
  • 【XR空间传送】深入理解Unity中 XR Interaction Toolkit 的 MatchOrientation 用法与使用场景(空间传送、视角切换)
  • Leetcode 3528. Unit Conversion I
  • AI艺术创作:Midjourney、Stable Diffusion与商业变现
  • 异步机制与 CPU 的关系解析
  • Sql刷题日志(day7)
  • Html1
  • 无人设备遥控器之移动手持定位系统篇
  • Chrome的插件扩展程序安装目录是什么?在哪个文件夹?
  • 40 python http介绍
  • LeetCode 2962.统计最大元素出现至少 K 次的子数组:滑动窗口
  • Leetcode 3534. Path Existence Queries in a Graph II
  • yum 安装 ncurses-devel 报错 baseurl 的解决方法
  • SpringCloud学习笔记
  • 焊接与热切割作业精选判断真题及答案
  • 模拟集成电路设计与仿真 : Feedback System
  • 甲骨文云2025深度解析:AI驱动的云原生生态与全球化突围
  • 端到端电力电子建模、仿真与控制及AI推理
  • AimRT 从零到一:官方示例精讲 —— 三、Executor示例.md