相关概念:
Makefile的作用:
告诉make如何编译(compile)和链接(link)程序。编译是将源文件编译成中间代码(linux下为.o文件),链接是指将这些.o文件合成可执行文件。
Makefile的典型规则语法:
目标<target> : 先决条件<prerequisites>
<TAB> 命令<commands>
Makefile主要包含五项内容:
- 显示规则:明确指出目标文件即其依赖文件和命令,来生成一个或多个目标文件。
- 隐晦规则:一些常用的默认规则,如”%o:%c”把.c文件编译成.o文件,不需要书写出来,make会自动推导。
- 变量的定义:表示一串文本字串,用$(XX)调用,调用$则用“$$“。
- 文件指示:引用其他的makefile,等。
- 注释 : “#”表示注释,使用#则用”#”。
注意:
- 每个命令前必须有一个tab键(或者使用.RECIPEPREFIX = XX 指定)
- 一行命令在一个shell中执行,即不同行分别存在于不同进程中。具体操作参考<make命令编程>
- 目标不一定是文件,也可能只是一个标签。这时不得不提到伪目标(.PHONY), ,用于执行一些辅助命令。
如: .PHONY : clean
clean:
rm *.o temp
当我们显示指明这个目标clean时才会执行。
4.Makefile最终目标,默认为第一个目标(.DEFAULT_GOAL := XX指定一个目标。或者使用all调用多个目标)
5.变量中还存在一些自动化变量如”$<”表示第一个依赖文件,”$@”表示当前目标,”$^”表示依赖文件的所有文件
以上参照<What is makefile and how dose it work>
若要深入了解建议看<跟我一起学makefile>
对于stm32工程:
(i)源程序
(ii).ld ”链接”:作用是链接.o文件生成elf文件。
修改是MEMORY中RAM和FLASH的配置,如
Stm32c8t6:
RAM (RWX) : ORIGIN = 0x20000000 , LENGTH = 20K
FLASH (RX) : ORIGIN = 0x08000000 , LENGTH = 63K
(iii)Makefile:
主要是三项设置:
- 编译器设置CFLAGS
- arm-none-eabi-objcopy 将.elf文件转化成.bin文件
- st-flash write main.bin 0x8000000’烧录
参考<how to compile and burn the code to stm32 chip on linux ubuntu>
其余的便是一些优化选项,指定库文件包含路径以及生成静态库,stm32芯片型号容量设置等。
(iv).cfg: “openocd.cfg"
(v) .sh:"bash脚本 "