Makefile模板

该Makefile模板用于管理ARM架构的汇编和C语言源代码编译过程。它定义了源码和头文件的路径,自动收集.c和.s文件,生成目标文件,并在output目录下进行编译和链接。链接阶段使用了指定的链接脚本,并最终生成boot.elf和boot.bin文件。此外,还包含了一个清除output目录的伪目标。
摘要由CSDN通过智能技术生成

Makefile模板

# 源码和头文件路径
SRCDIRS := src
INCDIRS := src

# 遍历得到汇编文件和C文件集合
C_SRCFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))
S_SRCFILES := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.s))

# 去除文件的路径前缀
CFILES :=$(notdir $(C_SRCFILES))
SFILES :=$(notdir $(S_SRCFILES))
# 使用patsubst函数,将文件后缀改为.o格式并顺便设置输出目录为output
C_OBJFILES := $(patsubst %.c, output/%.o, $(CFILES))
S_OBJFILES := $(patsubst %.s, output/%.o, $(SFILES))
OBJFILES := $(C_OBJFILES) $(S_OBJFILES)

# 在每个头文件路径前添加-I
INCLUDES :=$(patsubst %, -I %, $(INCDIRS))

# Makefile 预设的变量,告诉make在VPATH路径下去找源文件
VPATH :=$(SRCDIRS)
#设置编译器路径+前缀
ARM = /data/cn1891/training/hello_verisilicon_practice/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin/aarch64-none-elf

#编译选项
CFLAGS = -march=armv8-a -mtune=cortex-a76 -Wall -O2 -ffreestanding -nostartfiles -g

#目标文件名字
TARGET :=output/boot.elf
# 链接
# $@为目标集合,$^为依赖目标集合,
# $<为依赖目标集合的第一个,如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。
$(TARGET):$(OBJFILES)
	@echo "Linking..."
	@echo "$$<:" $< "$$^:" $^
	@$(ARM)-ld -T bootrom.lds -o $@ $^ # --verbose
	@$(ARM)-objcopy -O binary -S $@ output/boot.bin
	@$(ARM)-objdump -D -m arm $@ > output/boot.dis

output/%.o:%.s
	@echo "compile the assmble..."
	@$(ARM)-gcc $(CFLAGS) -c -o $@ $<

output/%.o:%.c
	@echo "compile the c code..."
	@$(ARM)-gcc $(CFLAGS) $(INCLUDES) -c -o $@ $<

# 伪目标文件
.PHONY:
clean:
	@echo "Cleaning output dir"
	@rm -rf output/
	@mkdir output
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liangtao`

请作者喝杯咖啡吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值