国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

Makefile管理

2024-06-28 14:32:00
字體:
來源:轉載
供稿:網友

      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
#=====================================


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铁岭县| 泾川县| 荆州市| 平远县| 龙井市| 临安市| 固阳县| 武平县| 青川县| 广水市| 嘉义市| 会东县| 榆中县| 湄潭县| 来宾市| 库尔勒市| 建始县| 庐江县| 视频| 鸡泽县| 阳泉市| 出国| 长子县| 海口市| 东源县| 锦州市| 伽师县| 太康县| 临朐县| 互助| 肇庆市| 桐梓县| 拉孜县| 武清区| 上饶县| 绩溪县| 彰化市| 桃源县| 晋中市| 滨海县| 涪陵区|