zoukankan      html  css  js  c++  java
  • Makefile 管理

          Makefile百科简介:一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

         在进行工程管理时往因为编译工具或源文件类型,数目多少等等的原因,需得重复编写代码

    那如何生成一个通用的Makefile呢? 如下例:

    # CORTEX-A9 PERI DRIVER CODE
    # VERSION 2.0
    # ATHUOR Je_Cortex
    # MODIFY DATE
    # 2014.05.28  Makefile

    CROSS_COMPILE = arm-none-eabi-
    #定义一个变量,CROSS_COMPILE ,变量值arm-none-eabi-
    #交叉编译工具的前缀

    NAME =led
    #定义一个变量NAME,变量值 led
    #生成的文件名称

    #================================================================#
    CFLAGS += -g   -O0  -mabi=apcs-gnu -mfpu=neon -mfloat-abi=softfp  -fno-builtin
        -nostdinc  -I ./common/include      #告诉编译器不链接gnu 内建库,链接当前路径下的./common/include
    # += 变量的原值后面追加
    # CFLAGS 是makefile的默认变量,作为gcc的选项
    # 对变量CFLAGS,追加值
    #  -E  -S  -c  -o  -g   -D  -i   -I  -l  -L
                                             
    LD = $(CROSS_COMPILE)ld
    #定义一个变量 LD =arm-none-eabi-ld
     
    CC = $(CROSS_COMPILE)gcc
    #定义一个变量 CC =arm-none-eabi-gcc

    OBJCOPY = $(CROSS_COMPILE)objcopy
    #定义一个变量 OBJCOPY =arm-none-eabi-objcopy

    OBJDUMP = $(CROSS_COMPILE)objdump
    ##定义一个变量 OBJDUMP =arm-none-eabi-objdump


    #================================================================#
    OBJSss  := $(wildcard start/*.S) $(wildcard common/src/*.S) $(wildcard *.S)
         $(wildcard start/*.c) $(wildcard common/src/*.c)      
         $(wildcard usr/*.c) $(wildcard *.c) 

    #$(wildcard start/*.S) : 按指定内容(start目录下,所有以.S结尾的指令)进行文件搜索,返回搜到的文件名


    OBJSs   := $(patsubst %.S,%.o,$(OBJSss))
    #定义变量OBJSs,变量的值为:start.o   _udivsi3.o   _umodsi3.o   uart.c  printf.c  led.c
    #$(patsubst %.S,%.o,$(OBJSss))  按照指定的规则(对变量OBJSss的值.S 替换成.o)对字符内容进行替换

    OBJS  := $(patsubst %.c,%.o,$(OBJSs))
    #定义变量OBJS,变量的值为:start.o   _udivsi3.o   _umodsi3.o   uart.o  printf.o  led.o
    #================================================================#
    %.o: %.S
     $(CC) $(CFLAGS) -c -o  $@ $<
    %.o: %.c
     $(CC) $(CFLAGS) -c -o  $@ $<


    all:clean  $(OBJS)
     $(LD)  $(OBJS) -T map.lds -o $(NAME).elf
     $(OBJCOPY)  -O binary  $(NAME).elf $(NAME).bin
     $(OBJDUMP) -D $(NAME).elf > $(NAME).dis

    #all:clean $(OBJS) 清除所有.o文件,防止修改.h后不编译
    #$(LD)  $(OBJS) -T map.lds -o $(NAME).elf
    # arm-none-eabi-ld  start.o  _udivsi3.o   _umodsi3.o   uart.o  printf.o  led.o  -T map.lds -o led.elf
    #根据链接脚本,链接生成elf

    #$(OBJCOPY)  -O binary  $(NAME).elf $(NAME).bin
    # arm-none-eabi-objcopy -O binary  led.elf  led.bin  二进制格式转换

    #$(OBJDUMP) -D $(NAME).elf > $(NAME).dis
    # arm-none-eabi-objdump -D led.elf >  led.dis
    #=================================================================#
    clean:
     rm -rf $(OBJS) *.elf *.bin *.dis *.o
    #=====================================

  • 相关阅读:
    安装CentOS7重启后提示License information
    使用VMware 安装Linux CentOS7
    VS 2015相当不错的功能:C#交互窗口
    未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
    RabbitMQ service is already present
    RabbitMQ安装后不能运行 Error: unable to connect to node nodedown
    〖Demo〗-- 计算器
    〖Demo〗-- HAproxy配置文件操作
    〖Python〗-- 模块系列(二)
    〖Python〗-- 模块系列(一)
  • 原文地址:https://www.cnblogs.com/Je-Cortex/p/4831867.html
Copyright © 2011-2022 走看看