作者:甘老师,华清远见嵌入式学院讲师。

# 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_COMPILE=arm-none-eabi-

NAME=rtc

#==============================================================================================================#

/***为了使我们的Makefile简洁,需要将一些编译选项统统定义在CFLAGS中

-g 表示为了调试gdb使用

-O0 表示优化级别为0,就是不进行优化

-mabi=apcs-gnu  使用gnu的apcs(ARM PROCEDUCE CALL STANDARD),它是指定用何种方式来实现函数的调用

-mfpu=neno 硬件浮点单元

-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  -mabi=apcs-gnu -mfpu=neon -mfloat-abi=softfp  -fno-builtin \

-nostdinc  -I ./common/include

LD= $(CROSS_COMPILE)ld

CC= $(CROSS_COMPILE)gcc

OBJCOPY = $(CROSS_COMPILE)objcopy

OBJDUMP = $(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.o

b.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)

相关阅读:

linux实验三makefile,实验平台上Makefile详细的解释相关推荐

  1. 20162329 张旭升 实验三:实验报告

    实验三:实验报告 课程:程序设计与数据结构 班级: 1623 姓名: 张旭升 学号:20162329 指导教师:娄嘉鹏 王志强 实验日期:5月12日 实验密级: 非密级 预习程度: 已预习 必修/选修 ...

  2. 2017-2018-11 20155307刘浩 20155338常胜杰 20155335俞昆 实验三 实时系统实验报告

    2017-2018-11 20155307刘浩 20155338常胜杰 20155335俞昆 实验三 实时系统 实验目的 实验一: 学习使用Linux命令wc(1) 基于Linux Socket程序设 ...

  3. 计算机网络实验类型有哪些,北航研究生计算机网络实验_实验三 网络层实验

    实验三  网络层实验 将执行命令的结果填入下表: 2.6.1中步骤2中的执行结果 2.6.1中步骤4中的执行结果 2.6.2中步骤11中的执行结果 2.分析2.6.1步骤3中截获的报文,统计" ...

  4. 计算机网络icmp实验,北航研究生计算机网络实验_实验三 网络层实验

    实验三  网络层实验 将执行命令的结果填入下表:

  5. 定时器实验循环彩灯C语言,单片机实验三-定时器实验

    实验三 定时器实验 --循环彩灯实验 一. 实验目的 1. 学习8051内部计数器的使用和编程方法. 2. 进一步掌握中断处理程序的编写方法. 二. 实验原理 1. 定时常数的确定 定时器/计数器的输 ...

  6. c语言数据结构二叉树实验报告,数据结构实验三二叉树实验报告.doc

    数据结构实验三二叉树实验报告 数据结构实验报告 实验名称: 实验三--二叉树 学生姓名: XX 班 级: 班内序号: 学 号: 日 期: 1.实验要求 1.1实验目的 通过选择下面两个题目之一进行实现 ...

  7. python语言程序设计实验教程答案实验三_20182204 实验三《Python程序设计》实验报告...

    20182204 <Python程序设计>实验三报告 课程:<Python程序设计> 班级:1822 姓名:20182204zwp 学号:20182204 实验教师:王志强老师 ...

  8. java实验三_java实验三实验报告.docx

    java实验三实验报告.docx 实验报告课程名称面向对象课程设计实验项目名称类的继承班级与班级代码13计算机科学与技术1班实验室名称(或课室)SS1205专业计算机科学与技术任课教师尹华学号1225 ...

  9. 计算机网络实验三 CPT实验

    Cisco Packet Tracer 实验 本部分实验共有 15 个,需使用 Cisco Packet Tracer 软件完成. 请大家先了解 VLSM.CIDR.RIP.OSPF.VLAN.STP ...

最新文章

  1. spring-cloud-ribbon负载均衡
  2. 公开课报名 | 基于自定义模板的OCR结果的结构化处理技术
  3. Flex Builder 开发语言切换问题
  4. lombok 构造函数_java程序员提高开发效率必备工具lombok,不会你就out了
  5. dubbo:9个你不一定知道,但好用的功能
  6. python 网络设备管理软件_一个查看网络设备信息Python小程序
  7. python烟花表白_python炫酷烟花表白源代码
  8. [转载] Python入门(输入/输出、数据类型、条件/循环语句)
  9. 95-50-050-java.nio.channels-NIO-NIO之Channel(通道)
  10. 约瑟夫环数据结构c语言程序,数据结构的C语言(类C语言)--单向循环链表--约瑟夫环...
  11. 送专利啦~~ .Net高阶异常处理之TopLevelEH
  12. vue实践06-项目实践
  13. 输入课程信息的C语言代码,[源码和文档分享]基于C语言的课程信息管理系统
  14. python多级菜单_python练习题:多级菜单(dict练习)
  15. 本地数据库数据导入linux
  16. sqlserver行列转换,动态行转换
  17. iphone自适应屏幕亮度_如何降低iPhone的亮度低于iOS允许的亮度
  18. 【干货分享】 淘宝客发朋友圈的技巧
  19. web哪里有php文件,web文件管理器
  20. 百度地图逆地址解析,经纬度解析

热门文章

  1. 【C++深度剖析教程30】C++中抽象类和接口
  2. 超级强大的socket工具ss,替代netstat
  3. EntiyFramework :Update model from database引起的两个问题
  4. 原生JS实现淡入淡出效果(fadeIn/fadeOut/fadeTo)
  5. 关于set的自定义比较函数的使用及结构体的上下二分用法
  6. python聚类分析结果很差_python中的聚类分析:value错误:x和y的大小必须相同
  7. 二分归并排序算法_第五篇排序算法|归并排序
  8. 哈佛大学计算机科学专,哈佛大学计算机科学专业
  9. MongoClient类参考文档
  10. 前端js获取图片大小 扩展名_前端 JS 获取 Image 图像 宽高 尺寸