较复杂makefile跟lds脚本程序的编写
2016-04-17 10:52
176 查看
首先看个makefile范例:
生产静态库的makefile:
链接器脚本:
/*指明工具链,并为其取个简单的别名*/ CC = arm-linux-gcc LD = arm-linux-ld AR = arm-linux-ar OBJCOPY = arm-linux-objcopy OBJDUMP = arm-linux-objdump /*指明头文件的位置*/ INCLUDEDIR := $(shell pwd)/include /*-Wall 提示警告,-O2表示优化选项,最优优化,-fno-builtin表示自己来实现某些库函数,如果不加此选项会出现冲突*/ CFLAGS := -Wall -O2 -fno-builtin /*-nostdinc,-nostdlib 表示不使用这两个库,-I$(INCLUDEDIR)表示链接到头文件*/ CPPFLAGS := -nostdinc -I$(INCLUDEDIR) -nostdlib /*使这些定义的变量生效*/ export CC AR LD OBJCOPY OBJDUMP INCLUDEDIR CFLAGS CPPFLAGS /**将.o文件和lib/目录下生成的.a静态库一起编译成.elf文件*/ objs := start.o main.o uart.o clock.o lcd.o lib/libc.a lcd70.bin: $(objs) ${LD} -Tlcd70.lds -o lcd70.elf $^ //主要此处使用了Tlcd70.lds这个链接器脚本指明的代码的存放位置。 ${OBJCOPY} -O binary -S lcd70.elf $@ ${OBJDUMP} -D lcd70.elf > lcd70.dis /*指明伪目标,也就是没有依赖文件*/ .PHONY : lib/libc.a /*进入目录中执行make命令生产.a静态库*/ lib/libc.a: cd lib; make; cd .. %.o:%.c ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $< %.o:%.S ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $< clean: make clean -C lib rm -f *.bin *.elf *.dis *.o
生产静态库的makefile:
objs := div64.o lib1funcs.o ctype.o muldi3.o printf.o string.o vsprintf.o /*生产静态库*/ libc.a: $(objs) ${AR} -r -o $@ $^ /*将.c和.S文件生成.o文件*/ %.o:%.c ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $< %.o:%.S ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $< clean: rm -f libc.a *.o
链接器脚本:
SECTIONS { . = 0x40000000; //指明了程序的开始运行地址 .text : { start.o//指明第一个要运行的文件 * (.text) } .data : { * (.data) } .bss : { * (.bss) } }
相关文章推荐
- 深入浅出Java并发包—锁机制(三)
- 继承与多态
- Oracle--数据库范式详解
- Android 音乐频谱实现
- eclipse调试百度地图demo提示 230错误 Scode码校验失败
- 如何使用Neofetch个性化显示Linux系统信息
- codeforces_300C_组合数_快速幂
- 直接插入排序
- C/C++可变参数省略号"..."的应用
- Android adb shell学习心得(一)
- 计算机虚拟机运行原理(结构组成)
- Xcode7 中创建静态库:.a 和 .framework(一)
- diy作品——视觉追踪小车介绍
- 完美解决IE8不支持margin auto问题
- 关于内网穿透,内网映射的一些想法
- Android 开发规范
- kosaraju算法求强连通分量
- rem单位
- TortoiseSVN使用教程
- [HDOJ2512]一卡通大冒险(DP)