• 较复杂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 $@
    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)
        }    
    }

      

  • 相关阅读:
    在浏览器中浏览git上项目目录结构
    部署elasticsearch(三节点)集群+filebeat+kibana
    谷歌浏览器安装Elasticsearch-head 插件
    Logstash配置文件修改自动加载和指定目录进行启动
    使用Dbvisualizer 连接 Elasticsearch
    Elasticsearch常见用法-分布式集群
    Elasticsearch常见用法-入门
    Elastic Stack 7.5.0白金版永不过期
    配置 Nginx 反向代理 WebSocket
    ES7.3.0配置
  • 原文地址:https://www.cnblogs.com/defen/p/5400492.html
Copyright © 2020-2023  润新知