Makefile -- 简易教程(三)

张开发
2026/6/16 10:37:30 15 分钟阅读
Makefile -- 简易教程(三)
超易懂 Makefile 教程嵌入式/GD32 专用版0. 一句话记住 Makefile 是干嘛的Makefile 编译脚本告诉make工具要编译哪些.c用什么编译器arm-none-eabi-gcc包含哪些头文件路径怎么链接、生成.bin/.hex你只需要敲make它就全自动编译。1. Makefile 基本格式目标: 依赖 命令前面必须是 Tab不能空格例子main.o: main.c arm-none-eabi-gcc -c main.c -o main.o意思要生成main.o需要main.c生成方法是执行后面的 gcc 命令。2. 变量Makefile 最常用 # 为注释# 编译器 CC arm-none-eabi-gcc # 芯片架构 ARCH -mcpucortex-m4 -mthumb # 头文件路径 INC -I./inc -I./drivers/inc # 源文件 SRC main.c \ gd32f4xx_gpio.c \ gd32f4xx_tli.c # 编译选项 CFLAGS $(ARCH) $(INC) -O0 -g -Wall使用$(CC) $(CFLAGS) -c main.c3. 模式规则批量编译 .c → .o这是 Makefile 最强大的地方%.o: %.c $(CC) $(CFLAGS) -c $ -o $含义%.o所有.o文件%.c对应.c文件$代表第一个依赖.c$代表目标.o所有 C 文件自动编译不用一个个写。4. 链接生成 elf → bin# 链接脚本 LDSCRIPT gd32f4xx.ld # 最终目标 all: app.bin app.elf: $(SRC:.c.o) $(CC) $(CFLAGS) -T $(LDSCRIPT) $^ -o $ app.bin: app.elf arm-none-eabi-objcopy -O binary $ $$^ 所有依赖文件一堆 .oobjcopy把 elf 转成单片机可烧录的 bin5. 清理make cleanclean: rm -f *.o *.elf *.bin使用make clean6. 一个完整迷你 Makefile可直接跑CC arm-none-eabi-gcc OBJCOPY arm-none-eabi-objcopy CFLAGS -mcpucortex-m4 -mthumb -I./inc -O0 -g LDSCRIPT gd32f4xx.ld SRC main.c gd32f4xx_gpio.c gd32f4xx_tli.c OBJ $(SRC:.c.o) all: app.bin app.bin: app.elf $(OBJCOPY) -O binary $ $ app.elf: $(OBJ) $(CC) $(CFLAGS) -T $(LDSCRIPT) $^ -o $ %.o: %.c $(CC) $(CFLAGS) -c $ -o $ clean: rm -f *.o *.elf *.bin7. Makefile 里的符号速查表必记$→ 目标文件$→ 第一个依赖$^→ 所有依赖%.o→ 通配符匹配所有 .o$(变量)→ 使用变量\→ 换行继续写8. 你 GD32 里的 Makefile 结构一看就懂真实工程里就是这几块工具路径arm-none-eabi-gcc芯片参数cpu、thumb、浮点头文件路径INCLUDE源文件列表C_SRCS编译规则%.o: %.c链接脚本.ld生成 elf、bin、hexclean9. 你现在就能学会的 3 个操作make # 编译 make clean # 删除编译产物 make -j4 # 4线程加速编译更快如果你愿意我可以拿你 GD32 工程里的真实 Makefile一行一行给你翻译讲解保证你彻底看懂、以后能自己改。

更多文章