多说评论插件对网站优化,有中文网站 怎么做英文网站,兰州市政建设集团官网,广州信息流推广公司排名作者#xff1a;甘老师,华清远见嵌入式学院讲师。# CORTEX-A8 PERI DRIVER CODE# VERSION 2.0# ATHUOR www.linuxidc.com# MODIFY DATE#2013.03.28 Makefile/***(下面的解释将用这个的形式进行标注)写好的源文件,要编译成二进制文件.需要指定工具链的,这里指定我们的工具链是…作者甘老师,华清远见嵌入式学院讲师。# CORTEX-A8 PERI DRIVER CODE# VERSION 2.0# ATHUOR www.linuxidc.com# MODIFY DATE#2013.03.28 Makefile/***(下面的解释将用这个的形式进行标注)写好的源文件,要编译成二进制文件.需要指定工具链的,这里指定我们的工具链是arm-none-eabi-,(arm体系结构,none厂商,eabi是编译环境,亦是arm-abi的编译环境),这里面的eabi的内容很多,可以理解成一个源文件是以何种方式生成可执行的二进制文件.最后NAME指定是这个工程的工程名*/CROSS_COMPILEarm-none-eabi-NAMErtc##/***为了使我们的Makefile简洁,需要将一些编译选项统统定义在CFLAGS中-g 表示为了调试gdb使用-O0 表示优化级别为0,就是不进行优化-mabiapcs-gnu 使用gnu的apcs(ARM PROCEDUCE CALL STANDARD)它是指定用何种方式来实现函数的调用-mfpuneno 硬件浮点单元-fno-builtin 表示不要使用编译器中默认的一些简单的内建函数这里是因为我们重写了printf(使用了puts putc等等,将输出指定到串口上输出到终端上)如果不使用这个编译选项printf的输出结构将输出到tty上也在我们的开发板上并没有这么一个用法。-nostdinc 不要在标准系统目录中寻找头文件.只搜索-I选项指定的目录(以及当前目录,如果合适).指定目标连接器LD $(CROSS_COMPILE)ld指定目标编译器CC $(CROSS_COMPILE)gcc目标复制命令生成二进制文件OBJCOPY $(CROSS_COMPILE)objcopy目标倾倒命令(有点望文生义了)用来创建一个反汇编代码来检查生成的目标文件OBJDUMP $(CROSS_COMPILE)objdump*/CFLAGS -g -O0 -mabiapcs-gnu -mfpuneon -mfloat-abisoftfp -fno-builtin \-nostdinc -I ./common/includeLD $(CROSS_COMPILE)ldCC $(CROSS_COMPILE)gccOBJCOPY $(CROSS_COMPILE)objcopyOBJDUMP $(CROSS_COMPILE)objdump##/**1、wildcard : 扩展通配符2、notdir 去除路径3、patsubst 替换通配符注意下面的操作仅仅是一个字符串的通配、替换工作OBJSss wildcard把 指定工程目录下的根目录/ 、 start/ 和 common/src/ 下的所有后缀是c的文件,和S文件全部展开。也就是OBJSss变量此时为全部相应的.c 和.S文件了(这里大家注意了这里用的是大S大S好看一些吗不是那是.S是支持gnu的汇编语法的文件.s是只支持标准汇编的语法的文件)好下面就是字符串的替换了工作了OBJSs将OBJSss中的.S文件带路径的替换成 .o文件此时这个时候OBJSs中只用.c和.o 了。OBJS将OBJSs中还没有替换掉的.c文件也替换成.o文件。现在再明白了吧可是还没有完做这些工作累死个人就是仅仅的做字符串的替换*/OBJSss : $(wildcard start/*.S) $(wildcard start/*.c)\ $(wildcard common/src/*.c) \$(wildcard common/src/*.S) $(wildcard *.c)\ $(wildcard *.S)OBJSs : $(patsubst %.S,%.o,$(OBJSss))OBJS : $(patsubst %.c,%.o,$(OBJSs))##/***上面全是做一些准备工作下面才到了编译的时候了让我们继续all是默认的终极目标当我们执行make的时候他就会去执行make all当在整个Makefile中没有all的时候一个目标标号就成了all(终极目标)当执行all的时候首先将clean然后需要依赖文件$(OBJS),这里比如a.ob.o c.o d.o而在工程目录下有a.c b.c c.s d.s 然后这个时候当然是需要a.o了发现在目标文件中去寻找a.S 发现a.s不存在发现存在a.c便使用$(CC) $(CFLAGS) -c -o a.o a.c 来编译来生成a.o了*/%.o: %.S$(CC) $(CFLAGS) -c -o $ $%.o: %.c$(CC) $(CFLAGS) -c -o $ $all:clean $(OBJS)相关阅读