如何编写一个简单的makefile
2024-10-18 17:19:42
一个规则的构成
目标:依赖1,依赖2······ 命令
例子:
objs := init.o nand.o head.o main.o nand.bin : $(objs)
arm-linux-ld -Tnand.lds -o nand_elf $^
arm-linux-objcopy -O binary -S nand_elf $@
arm-linux-objdump -D -m arm nand_elf > nand.dis %.o:%.c
arm-linux-gcc -Wall -c -O2 -o $@ $< %.o:%.S
arm-linux-gcc -Wall -c -O2 -o $@ $< clean:
rm -f nand.dis nand.bin nand_elf *.o
解释:
(1)objs变量可以起到“宏”的作用,引用变量时,用$(objs)。
(2)最终目标为nand.bin,它的依赖为init.o nand.o head.o main.o。
(3)表示把所有的c语言文件用arm-linux-gcc生成对应的o文件。
%.o:%.c
arm-linux-gcc -Wall -c -O2 -o $@ $<
(4)表示把所有的s语言文件用arm-linux-gcc生成对应的o文件。
%.o:%.s
arm-linux-gcc -Wall -c -O2 -o $@ $<
(5)表示arm-linux-ld以链接脚本nand.lds为规则,将init.o nand.o head.o main.o链接生成一个nand_elf的文件。
arm-linux-ld -Tnand.lds -o nand_elf $^
(6)表示将nand_elf文件转换成bin文件。
arm-linux-objcopy -O binary -S nand_elf $@
(7)表示将nand_elf转换生成nand.dis的反汇编文件。
arm-linux-objdump -D -m arm nand_elf > nand.dis
其中:
$^ 所有依赖目标的集合
$@ 规则中的目标文件集
$< 依赖中第一个目标的名字。
最新文章
- 实战Java虚拟机之三“G1的新生代GC”
- communication between threads 线程间通信 Programming Concurrent Activities 程序设计中的并发活动 Ada task 任务 Java thread 线程
- keil 编译的一些错误
- 深入理解JavaScript的变量作用域(转载Rain Man之作)
- Manifest文件简介
- java异常练习2
- Android 改变标题栏的背景色
- C#操作Xml:使用XmlReader读Xml
- Zepto Code Rush 2014——Dungeons and Candies
- Android:自定义Dialog大小,显示圆角
- 4、File类之获取方法
- rebot framework的搭建 在windows下
- springboot全局异常处理
- 1、Filebeat概述
- Python&#160;对服务器返回数据编码进行判断之chardet
- 图解Redis之数据结构篇——链表
- bzoj千题计划320:bzoj4939: [Ynoi2016]掉进兔子洞(莫队 + bitset)
- 【Linux】Screen命令
- Thinkphp 3.2 验证码图片显示错误解决方法
- 织梦dedecms模板制作时,循环递增autoindex使用方法整理
热门文章
- 关于fork有意思的两道题目
- 查看线程linux cpu使用率
- 几个命令行命令的总结(node, babel-cli, babel-node)
- springframework hibernate Transaction not successfully started
- Oracle、MySql、Sql Server比对
- struts 2学习笔记—浅谈struts的线程安全
- [置顶] iptables 性能 测试
- 使用navicat 11 出现不能返回存储过程结果的问题
- Visual Studio 调试技巧 (二)-- 为中断设置条件
- block没那么难(一):block的实现