CC = arm-linux-gcc
用于将多个目标文件、库文件链接成可执行文件
LD = arm-linux-ld
AR = arm-linux-ar
复制一个目标文件的内容到另一个文件
OBJCOPY = arm-linux-objcopy
显示 二进制文件信息,也可用于查看反汇编代码
OBJDUMP = arm-linux-objdump-Wall 表示打开所有需要注意的警告信息, -O2是优化选项,CFLAGS用于 C 预编译处理
CFLAGS := -Wall -O2
这里built-in表示编译器里面有自带的strcpy函数,而用户定义的strcpy函数跟其不一样,编译时加上-nostdlib -fno-builtin或者-nostdlib -fno-builtin-strcpy(指定某个函数),表示用用户定义的strcpy函数,而非编译器自带的strcpy函数
-nostdinc 不在标准系统目录中搜索头文件,只在-I指定的目录中搜索
-nostdinc++ 不在C++标准系统目录中搜索头文件,但在其他标准目录仍然搜索
CPPFLAGS := -nostdinc -nostdlib -fno-builtin
目标文件来源于 start.o init.o boot.o
objs := start.o init.o boot.o
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。
boot.bin: $(objs)
arm-linux-ld -Tboot.lds -o boot.elf $^
中-Tboot.lds中-T是指定链接脚本为boot.lds,-o指定链接成的可执行文件是boot.elf, $^表示start.o init.o boot.o
${LD} -Tboot.lds -o boot.elf $^
arm-linux-objcopy -O binary -S boot.elf $@
-O binary表示指定输出二进制文件,-S表示不从源文件中复制重定位信息和符号信息到目标文件中去。boot.elf 是elf格式的可执行文件, $@是目标文件,代表boot.bin
${OBJCOPY} -O binary -S boot.elf $@
arm-linux-objdump -D -m arm boot.elf > boot.dis,这里-D表示反汇编所有段,-m arm指定CPU架构为arm,将elf格式的文件 boot.elf转换为反汇编文件boot.dis
所有.o文件有同名的.c文件时执行下面的命令语句
%.o:%.c
${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
所有.o文件有同名的.S文件时执行下面的命令语句
%.o:%.S
${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
在执行make clean命令时会调用到
clean:
rm -f *.o *.bin *.elf *.dis