较复杂makefile跟lds脚本程序的编写
首先看个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)
}
}
较复杂makefile跟lds脚本程序的编写的更多相关文章
- 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705 参考博客 : [嵌入式开发]嵌入式 开发环境 (远 ...
- 创建和运行shell脚本程序
转载请标明http://www.cnblogs.com/winifred-tang94/ 要创建一个shell脚本程序,首先新建一个文本文件,然后在这个文本文件中按照shell编程规则输入shell命 ...
- Xtrabackup每周增量备份脚本程序
Xtrabackup每周增量备份脚本程序(含附件) 程序描述 本程序是一个对percona xtrabackup使用的脚本,它完成了MySQL每周的备份. 程序结构 此程序包含了4个目录(bin. ...
- Makefile与shell脚本的区别
引用博客:Makefile与shell脚本区别 在Makefile可以调用shell脚本,但是Makefile和shell脚本是不同的.本文试着归纳一下Makefile和shell脚本的不同. 1.s ...
- Makefile与shell脚本区别
http://blog.chinaunix.net/uid-20672257-id-3345593.html 在Makefile可以调用shell脚本,但是Makefile和shell脚本是不同的.本 ...
- Linux CAN Shell 测试脚本程序
2012-01-13 22:57:14 为我的开发板2440做二次开发,添加了can驱动,做了驱动测试程序,没理由不添加一个测试脚本程序啊!修改了测试程序,使应用程序更加灵活,添加了一下传递参数.接着 ...
- 09 shell脚本程序练习
练习1:写一个脚本程序,完成以下任务 1.添加五个用户,user1.user2.user3.user4.user5: 2.添加之前先判断是否存在该用户,如果存在则显示“某某用户已存在”: 3.每个用户 ...
- 在Linux中以普通用户开机自动运行脚本程序
测试环境:CentOS6.5 管理员:root 普通用户:test1 实现目标:在Linux启动时,以普通用户test1自动运行位于根目录下的脚本程序test.py,该程序会在每次执行时自动向本地日志 ...
- 下载 LFS所需要的源码包的脚本程序及检验方法
下载 LFS所需要的源码包的脚本程序及检验方法 http://blog.csdn.net/yygydjkthh/article/details/45315143
随机推荐
- Tomcat源码调试环境搭建
我们一般都是为了解决某个问题,才去看源码的.Java体系就是这点好处,源码唾手可得.遇到问题,最后的解决方法总是可以从源码中找到. 参考了网上的文章,过程整理如下: 1. 下载和导入 官网下载编译好的 ...
- sql子查询
一.子查询入门: 1.单值子查询: 单值子查询的唯一限制:子查询的返回值必须只有一行记录,而且只能有一列(又被称为标量子查询). 可以使用在select语句的列表.表达式中,以及where语句中等. ...
- [知了堂学习笔记]_记一次BootStrap的使用
效果图如下: 一.简介: 什么是Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架. 什么是响应式布局? 引用一句Bootstrap的标题语 " ...
- ArcGIS字段计算器分割字段中的字符串
ArcGIS字段计算器分割字段中的字符串 实例:在一个字段中存有长宽高三个属性数据,以x分割.例如sss为字段名(字段属性为文本类型),数据格式为:100x200x300,利用字段计算器分别将三个数存 ...
- 使用layui-tree美化左侧菜单,点击生成tab选项
layui-tree美化左侧菜单 html <div class="layui-side layui-bg-black"> <div class="la ...
- Intellij-创建Maven项目速度慢
原因: IDEA根据maven archetype的本质,其实是执行mvn archetype:generate命令,该命令执行时,需要指定一个archetype-catalog.xml文件. 该命令 ...
- 1.JavaScript 教程:基础语法
简介: JavaScript web 开发人员必须学习的 3 门语言中的一门: HTML 定义了网页的内容 CSS 描述了网页的布局 JavaScript 网页的行为 用法: (1)HTML 中的脚本 ...
- maven系列--maven目录
我们在玩maven,首先就是利用maven来管理我们的项目.其实maven并不难,它无非是一种目录结构.所以在本系列开始之前,我们要细致的了解下maven的目录,其实也就是maven的约定. 约定优于 ...
- linkin大话面向对象--java关键字
java中的关键字有以下几个,他们不能作任何其它的用途. 发现没,java中的关键字全是小写,java是严格区分大小写的. abstract default null synchronized ...
- 检查型异常(Checked Exception)与非检查型异常(Unchecked Exception)
这两个概念看了忘,碰着了又看,老是傻傻的分不清楚,今天把心得结合从网上搜的资料简单整理一下,希望帮自己明确区分开这两个概念,并牢牢的记住 1.检查型异常(Checked Exception) 个人理解 ...