较复杂makefile跟lds脚本程序的编写

首先看个makefile范例:

 1 /*指明工具链,并为其取个简单的别名*/
 2 CC      = arm-linux-gcc
 3 LD      = arm-linux-ld
 4 AR      = arm-linux-ar
 5 OBJCOPY = arm-linux-objcopy
 6 OBJDUMP = arm-linux-objdump
 7 /*指明头文件的位置*/
 8 INCLUDEDIR     := $(shell pwd)/include
 9 /*-Wall 提示警告,-O2表示优化选项,最优优化,-fno-builtin表示自己来实现某些库函数,如果不加此选项会出现冲突*/
10 CFLAGS         := -Wall -O2 -fno-builtin
11 /*-nostdinc,-nostdlib 表示不使用这两个库,-I$(INCLUDEDIR)表示链接到头文件*/
12 CPPFLAGS       := -nostdinc -I$(INCLUDEDIR) -nostdlib
13
14 /*使这些定义的变量生效*/
15 export     CC AR LD OBJCOPY OBJDUMP INCLUDEDIR CFLAGS CPPFLAGS
16
17 /**将.o文件和lib/目录下生成的.a静态库一起编译成.elf文件*/
18 objs := start.o main.o uart.o clock.o lcd.o lib/libc.a
19
20 lcd70.bin: $(objs)
21     ${LD} -Tlcd70.lds -o lcd70.elf $^  //主要此处使用了Tlcd70.lds这个链接器脚本指明的代码的存放位置。
22     ${OBJCOPY} -O binary -S lcd70.elf [email protected]
23     ${OBJDUMP} -D lcd70.elf > lcd70.dis
24
25 /*指明伪目标,也就是没有依赖文件*/
26 .PHONY : lib/libc.a
27 /*进入目录中执行make命令生产.a静态库*/
28 lib/libc.a:
29     cd lib; make; cd ..
30
31 %.o:%.c
32     ${CC} $(CPPFLAGS) $(CFLAGS) -c -o [email protected] $<
33
34 %.o:%.S
35     ${CC} $(CPPFLAGS) $(CFLAGS) -c -o [email protected] $<
36
37 clean:
38     make  clean -C lib
39     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 [email protected] $^
/*将.c和.S文件生成.o文件*/
%.o:%.c
    ${CC} $(CPPFLAGS) $(CFLAGS) -c -o [email protected] $<

%.o:%.S
    ${CC} $(CPPFLAGS) $(CFLAGS) -c -o [email protected] $<

clean:
    rm -f libc.a *.o    

链接器脚本:

SECTIONS
{
    . = 0x40000000;  //指明了程序的开始运行地址
    .text : {
        start.o//指明第一个要运行的文件
        * (.text)
    }
    .data : {
        * (.data)
    }
    .bss : {
        * (.bss)
    }
}

  

时间: 2024-08-03 22:20:34

较复杂makefile跟lds脚本程序的编写的相关文章

【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705  参考博客 : [嵌入式开发]嵌入式 开发环境 (远程登录 | 文件共享 | NFS TFTP 服务器 | 串口连接 | Win8.1 + RedHat Enterprise 6.3 + Vmware11) 开发环境 : -- 操作系统 : Vmware11 + RedHat6.3 企业版 + Win8.1; -- 硬件 : OK-6410-A 开发

转:u-boot分析 三 (u-boot.lds脚本)

u-boot分析 三 (u-boot.lds脚本) 转自:http://blog.csdn.net/itxiebo/article/details/50938753 目的, 了解链接器用到的脚本文件u-boot.lds. 在开始这篇博文之前,需要先了解一些GNU linker script的基本知识,可以参考博主的另外一篇分享<GNU linker script,ld script,GNU链接脚本> 在<u-boot分析 二>中,我们分析u-boot的目录结构,提及到了程序入口st

windows下python脚本程序的运行

c:\python33\python.exe c:\python33\trycoding.py windows下python脚本程序的运行,布布扣,bubuko.com

创建和运行shell脚本程序

转载请标明http://www.cnblogs.com/winifred-tang94/ 要创建一个shell脚本程序,首先新建一个文本文件,然后在这个文本文件中按照shell编程规则输入shell命令即可. 要运行一个shell程序有两种方式: A. 赋予shell程序的执行权限(通过chmod命令) B. 通过另外的shell加载脚本(通过sh ./脚本文件名称的方式运行) Eg. 注意:上面的代码是错误的,最后echo后跟着的不是单引号’而是反引号`(esc下面的那个键) 也可以用sh .

下载 LFS所需要的源码包的脚本程序及检验方法

/*********************************************************************  * Author  : Samson  * Date    : 04/27/2015  * Test platform:  *              gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2  *              GNU bash, 4.3.11(1)-release (x86_64-pc-linux-gnu)

python脚本程序,传入参数*要用单引号&#39;*&#39;

*号作为python脚本的传入参数时,必须用单引号'',才能正确传入.如python test.py 2014 '*' age python test.py 2014 * age是错误的. 比如 test.py脚本如下 import sys hdfs_report_historical_year = sys.argv[1] # eg:2014-05,2014-12,etc. hdfs_report_historical_month = sys.argv[2] # eg:all,region,ci

制作显示欢迎信息的脚本程序

终端程序恐怕是Linux用户使用最为频繁的了.我的Debian系统启动后便是直接进入的终端界面.为了在每次登录时或者是在X视窗环境下打开终端程序时显示一些欢迎信息,比如当前的日期.名人警句等,从而可以增加一些生活情趣,就可以创建一个脚本程序,然后在~/.bashrc文件调用它.我自己就写了一个welcome.sh,执行时首先显示当前登录的用户名与主机名,然后打印出当天的日期.当天处于今年的第几个星期——这一数据在项目汇报中常被使用.同时,显示当天是今年的第几天,计算出距离年末还有几天,这样就可以

使用shc加密bash脚本程序

摘要以前写看到别人写的脚本用shc加密的,我也有就了解了下. SHC代表shell script compiler,即shell脚本编译器.通过SHC编译过的脚本程序对普通用户而言是不读的,因此如果你想保护你的代码(例如含有密钥),则可以考虑SHC:然而有些人可以通过反向编译的方式破解SHC加密过的脚本.下面我们开始介绍: 一.使用SHC加密bash脚本程序1.下载并编译SHC# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.

PHP全国省市区地址分割提取脚本程序

github地址: https://github.com/zmxfree/addressapart 比如将 浙江省杭州市江干区XX路X号 分割成 浙江省 杭州市 江干区 XX路X号,方便excel操作. 目前支持大部分中国省市区地址信息的分割,可以自行更新地址源信息. 主程序代码: <?php /**- * 省市区地址分割 * 将 浙江省杭州市江干区XX路X号 分割成 浙江省 杭州市 江干区 XX路X号 * User: [email protected] * Date: 14-6-18 * Ti