每天一篇Makefile(二)
来源:互联网 发布:淘宝设置主营类目 编辑:程序博客网 时间:2024/05/16 11:14
好,废话不多说,进入正题,来看我们今天的要讲的Makefile:
lcd.bin: start.o main.o led.o clock.o uart.o lib.o lcd.oarm-linux-ld -Ttext 0x20000000 -o lcd.elf $^arm-linux-objcopy -O binary lcd.elf $@arm-linux-objdump -D lcd.elf > lcd.disgcc -o mktools mktools.c./mktools $@ new_lcd.bin%.o : %.Sarm-linux-gcc -o $@ $< -c%.o : %.carm-linux-gcc -o $@ $< -cclean:rm *.o *.elf *.bin *.dis mktoolsload:dd iflag=dsync oflag=dsync if=new_lcd.bin of=/dev/sdb seek=1
1. Makefile的基本规则:
target... : prerequisites ...
command
target :目标文件,可以是obj文件,也可以是执行文件或标签
prerequisites: 要生成那个target所需要的文件或是目标。
command:make需要执行的命令,就是一些shell命令
注意: command前面是一个Tab,不是空格
2.第一行表示要编译出lcd.bin需要依赖后面的.o文件,接下来的四行就是command,通过它们来编译出lcd.bin。
3.arm-linux-ld是命令,交叉编译工具中的命令,-Ttext :指定代码段的起始地址 , -o :表示输出的文件。
4. $^ : 这是一个自动变量,它表示所有依赖目标的集合,即:start.o main.o led.o clock.o uart.o lib.o lcd.o 。
5.arm-linux-objcopy被用来复制一个目标文件的内容到另一个文件中,-O:输出的格式,在拷贝的过程中会进行格式转换。
6.$@ :这又是一个自动变量,它表示规则中的目标文件集,即lcd.bin
7. arm-linux-objcopy -O binary lcd.elf $@ : 这行是将.elf文件(lcd.elf)转换成二进制的.bin文件(lcd.bin)
8.arm-linux-objdump用来查看反汇编代码 , -D:表示反汇编所有的段。
9. 接着gcc编译mktools.c ,然后用编译出来的mktoos将lcd.bin转成new_lcd.bin
10.目标中的"%"定义表示对文件名的匹配,"%"表示长度任意的非空字符串, 如果要生成的start.o, 那么"%.s"表示start.s
11. $< : 依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。
12.arm-linux-gcc -o $@ $< -c : 依次编译对应的目标, -c参数将对源程序进行预处理、编译、汇编操作。
13. load是一个label, 它下面的语句是执行dd命令,该命令的使用可以自行百度。
14.make执行流程: makefile一般是从上往下执行, 当执行第一行时,发现没有依赖对象,所以会先向下找,然后就找到有两个目标会编译出所需要的.o文件,所以依次执行arm-linux-gcc命令。编译出.o文件后就去第一行下面依次执行命令来编译出new_lcd.bin文件。
总结:该份Makefile比较复杂的就是那些自动变量和一些交叉编译命令,交叉编译命令比较少用,需要用的时候再查或直接拷贝过去用
- 每天一篇Makefile(二)
- 每天一篇Makefile(一)
- 每天一篇面试题(二)
- 每天一点Linux-Makefile
- 每天读一篇
- 坚持每天一篇小博文
- 每天一篇,有助消化
- 每天一篇文章!
- Makefile(二)
- 二、makefile
- linux每天学一点--makefile
- 开博第一篇---每天进步一点点
- 每天一篇paper 之AAM
- 每天一篇python:数据类型篇
- 每天一篇python:函数篇
- 每天一篇python:对象篇
- 每天写一篇论文理解
- 每天一篇python:系统篇
- 剑指offer之Python练习二
- OpenCV3_C++_Circles()画圆圈 实例
- TensorFlow计算框架训练图片
- Unity 创建一个蜂窝状的图形
- what is what?
- 每天一篇Makefile(二)
- 轮播图
- 【比特币】 Histories of bitcoin releases
- ImageLoder的使用
- Web前端性能优化优秀文章集锦
- Django filter中用contains和icontains区别
- OpenCV3_C++_Lines()在图像上画直线 实例
- angularjs的添加,显示隐藏
- 062 不定积分之分部积分法 case 1