makefile文件详解

  在linux中输入vi Makefile 来实现创建Makefile文件

  注意:命令行前必须加TAB键

  例如:将两个文件led.c和crt0.S汇编文件,制作一个Makefile文件

1 led.bin : crt0.S led.c
2 arm-linux-gcc -c -o crt0.o crt0.c
3 arm-linux-gcc -c -o led.o led.c
4 arm-linux-ld -Ttext 0x00000000 -g crt0.o led.o -o led_elf
5 arm-linux-objcopy -O binary -S led_elf led.bin
6 arm-linux-objdump -D -m arm led_elf > led.dis
7 clean:
8 rm -f led_elf led.dis led.bin *.o

led.bin : crt0.S led.c 指的是依赖关系,led.bin是目标文件,:后面是依赖文件

1.arm-linux-gcc 编译选项

-o 编译及链接,会生成一个exe可执行文件
-Wall 指定产生全部的警告信息
-O/-O2/-O3 数字越高,代表优化的更多,可以使生成的执行文件的提高执行效率
-c 编译不链接,会生成一个*.obj文件,若后面加了-o,则表示指定输出文件名称
-static 静态链接,生成的文件会非常大, 好处在于不需要动态链接库,也可以运行
-S 只激活预处理和编译,就是指把文件编译成为汇编代码

例如:
arm-linux-gcc -c -o led.o led.c :编译不链接

arm-linux-gcc -o led led.c :编译以及链接

2.arm-linux-ld 连接选项

-Ttext 0x00000000 指代码段头地址为0x00000000
-T链接脚本 指使用链接脚本来进行更复杂的地址设置,包括了代码段,数据段,bss段等
-o 后面指的将多个文件连接在一起,生成一个obj文件,上面的名称是led_elf。
-pie 生成动态链接地址段,一般在新版uboot里会看到

3.arm-linux-objcopy 复制选项,支持格式转换

-O binary 用来指定生成文件按照后面的格式来输出,其中binary是指生成二进制(.bin)文件。
-S 不从源文件中复制重定位信息和符号信息到目标文件中去

4.arm-linux-objdump 反编译选项

-D 反编译所有段
-b binary 指定反编译目标文件格式
-m ram 指定反编译目标文件所需的架构,这里是ram架构

发布了96 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_16933601/article/details/104326785
今日推荐