码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-04-17 11:29:35      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

首先看个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 $@
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 $@ $<
33 
34 %.o:%.S
35     ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
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 $@ $^
/*将.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脚本程序的编写

标签:

原文地址:http://www.cnblogs.com/defen/p/5400492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!