首先看个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
随机推荐
-
rank() over(partition)的使用
有的时候会遇到这样的问题,我们需要查询一张表,而且要按照业务排序,比如我需要如下的结果: 地区 日期 费用 产品编号 用户编号 290 201202 258 1 ...
-
MySQL用户管理:添加用户、授权、删除用户
文章首发于[博客园-陈树义],请尊重原创保留原文链接. 添加用户 以root用户登录数据库,运行以下命令: create user zhangsan identified by 'zhangsan'; ...
-
必须知道的Linux内核常识详解
一.内核功能.内核发行版 1.到底什么是操作系统 (1)linux.windows.android.ucos就是操作系统: (2)操作系统本质上是一个程序,由很多个源文件构成,需要编译连接成操作系统程 ...
-
Oracle使用
Oracle数据库首先必须在服务器端安装,安装完成后在DBCA中创建数据库,然后在Net Configuration Assistant中配置监听程序和本地Net服务名.然后安装本地Oracle客户端 ...
-
nginx 代理 https 后,应用变成 http
需求:nginx 代理 https,后面的 tomcat 处理 http 请求,sso 的客户端,重定向时需要带上 target,而这个 target 默认是 tomcat 的 http,现在需要把这 ...
-
jmeter下载和配置
一.下载 1.进入官网:http://jmeter.apache.org/ 3.环境变量相关配置 电脑桌面---->“计算机”图标---->鼠标右键选择“属性”---->点击高级系统 ...
-
Asp.net Zero 应用实战-官方示例PhoneBook学习1_修改1版
适用Zero版本:ASP.NET Core & Angular 2+ (aspnet-zero-core-3.1.0). 该版本官方有两个solution文件夹:Angular(前端) 和 a ...
-
【XSY2528】道路建设 LCT 可持久化线段树
题目描述 给你一个\(n\)个点\(m\)条边图,\(q\)个询问,每次问你边权在\([l,r]\)之间的边组成的最小生成树(森林)的边权和.强制在线. \(n,m,q\leq 100000\) 题解 ...
-
C#开发Unity游戏教程之判断语句
C#开发Unity游戏教程之判断语句 游戏执行路径的选择——判断 玩家在游戏时,无时无刻不在通过判断做出选择.例如,正是因为玩家做出的选择不同,才导致游戏朝着不同的剧情发展,因此一个玩家可以对一个游戏 ...
-
WebLogic使用总结(七)——WebLogic部署Web应用并绑定域名
一.在WebLogic中创建一个虚拟主机 找到虚拟主机面板,如下图所示: