linux实验三makefile,实验平台上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_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)

相关阅读:

0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础C#总结

由于在学习c#这段视频是为了辅助设计模式的学习,这部分的内容也和VB的内容很大程度上是一样的.虽然在开始的 时候,有些困难.在接触了一些例子和实验后.理解起来变得顺畅了很多.下面是对c#基础内容的总结.很多内容都在VB中有 过接触,所以都是些基础知识.捋一捋,将这些时间脑子的…

e站app改内置hosts_米家踢脚线电暖器E评测:符合现代家居审美 全屋取暖“小钢炮”...

【科技犬】对于没有集中供暖的长江中下游地区居民而言&#xff0c;电暖器是不折不扣的"保命神器"。而在深秋的北方&#xff0c;昼夜温差较大&#xff0c;这种时候使用灵活、易于搬运的电暖器也成为更加明智的选择。在北方每年的冬季&#xff0c;室内温度就直接关系着…

锐炬显卡可以linux吗,Intel Broadwell桌面CPU性能测试:Iris Pro 6200核显无敌了

Intel已经在Computex 2015发布了Broadwell-H桌面版处理器&#xff0c;分别有Core i7-5775C和Core i5-5765C两款&#xff0c;另有3款BGA封装的嵌入式型号。它们的特色是内置Intel史上最强Iris Pro 6200核显、以及较大的超频空间。这款处理器现在已经解禁&#xff0c;发布了评测&…

经纬度转化为xy坐标系_Arcgis添加经纬度矢量点

今天帮舍友作图&#xff0c;才体会到九边说的。学技术使人清醒&#xff0c;清醒的认识自己能力有限。少去网上怨天怨地&#xff0c;踏踏实实去提升实力。这是她给我的原始数据&#xff0c;一堆经纬度点。首先我们先进行数据去重&#xff0c;当然这一步可以根据自己数据考虑是否…

物联网课程学习目标_学习攻略|软件工程统计方法amp;amp;物联网

软件工程统计方法&&物联网任课老师&#xff1a;余松森&#xff0c;葛红课程特点及困难本课程的主要内容涉及统计机器学习方法&#xff0c;以及如何采用Python进行应用实现。同学们在学习中主要遇到以下问题&#xff1a;1、在课程内容方面&#xff0c;课本上的关于pytho…

tdk怎么设置_你真的做好网站的标题、描述、关键词(TDK)设置了吗?

SEO其实是个苦活累活&#xff0c;大部分的工作都是在每日不断的坚持与重复。当然也是个细致活&#xff0c;很多的工作都是对一些细节问题的处理。可能平时你没留意到的地方&#xff0c;就是你的网站数据没能上来的原因。比如说SEO的基础设置&#xff1a;TDK。说到TDK(标题、描述…

C# 监控字段_监控交换机选择:千兆/百兆/核心/PoE/光纤交换机选型指南

我们就交换机选型时的四个主要方面讲一下。01选择千兆还是百兆&#xff1f;视频监控系统的网络中&#xff0c;需要传输大量、持续的视频数据&#xff0c;这就要求交换机具有稳定转发数据的能力。交换机接入的摄像头数量越多&#xff0c;流经该交换机的数据量就会越大。我们可以…

JAVA学习笔记——JAVA基础语法之精华

一、标识符 概念&#xff1a;JAVA里面我们可以给他取名字的&#xff08;变量、类、方法等等&#xff09;就是标识符&#xff1a; 注意&#xff1a;1、标识符只能包含字母、数字、下划线还有美元符号$ 2、只能以字母、下划线和美元符号开头 二、变量 概念&#xff1a;JAVA中储存…

c语言 行程长度编码,C语言编程题,求大佬帮助,关于数组的。

满意答案6kidf3xhs2017.11.07采纳率&#xff1a;41% 等级&#xff1a;8已帮助&#xff1a;62人2 个关键&#xff1a;2位数字的随机数&#xff1a; a[i] 10 rand() % 90;10位或个位 含5 的 并高于平均值的 数&#xff1a;if (a[i]>ave && ( a[i]%50 || (a[i]/10)…

wpf学习笔记二 深入学习 xaml

1、XAML 主要用于绘制UI界面&#xff0c;最大的优点是能使UI与运行逻辑分离开来&#xff0c;使得整个程序回到逻辑处理上来。 每一个标签对应.NET Framework类库的一个控件类。通过设置标签的Attribute&#xff0c;不仅可以对标签所对应的控件 对象Property进行赋值&#xf…

cortex a7 a53_小号“A7”终于亮相,配4米9车长 大溜背!堪称15万内最强颜值!

原标题&#xff1a;小号“A7”终于亮相&#xff0c;配4米9车长 大溜背&#xff01;堪称15万内最强颜值&#xff01;今天来推荐一款b级轿车&#xff0c;大家都知道现在国内热度最高的就上suv车型了&#xff0c;但是销量最高的车型依旧还是轿车车型&#xff0c;因为轿车车型的粉丝…

C语言数据结构迷宫实验报告,数据结构c语言课程设计报告之迷宫

数据结构c语言课程设计报告之迷宫 C语言与数据结构课程设计报告学 号 ** 姓 名 ** 课程设计题目 迷 宫 求 解 2012 年 5 月目 录1 需求分析 1.1 功能与数据需求 1.1.1 题目要求的功能 1.1.2 扩展功能 1.2 界面需求 1.3 开发环境与运行需求 2 概要设计 2.1主要数据结构2.2程序总…

unicode字符大全可复制_说说Excel不可见字符的那些事

今天小伙伴问了个问题看上去啥也没有&#xff0c;为什么黏贴到记事本上前面那么多空白呢&#xff1f;典型的不可见字符惹出来的麻烦&#xff0c;这个往往是公司软件导出数据造成的我们今天就来细说说不可见字符的那些事拿上面的例子说明大部分不可见字符&#xff0c;这一步就能…

删除后别人的微信号变成wxid_微信偷偷更新:终于能改微信号,每年改一次

跟微信打交道多年&#xff0c;机哥可以说是六号线最熟知微信套路的人。比如&#xff0c;微信最喜欢在临近周末的时候&#xff0c;来一波悄悄更新。。难不倒我&#xff01;微信新动态&#xff0c;几乎每次都被机哥妙手抓住。掐指一算&#xff0c;今天周五。安卓版微信 7.0.15 更…

android设置多个按钮,android代码中设置两个按钮之间位置

package com.example.helloworld01;//包名import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.app.Activity;import android.graphics.Color;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget…

cad管线交叉怎么画_高效设计!多种方式进行管线连接、伸缩

节点连接就是需要把一些节点连接起来&#xff0c;需要通过拖拽把他连接起来&#xff0c;类似CAD的延伸。管立得中的节点连接是可以创建他们的连接关系的&#xff0c;会进行管道的联动。下面是使用管线连接功能进行连接节点&#xff0c;以及管道伸缩的的操作方式。一、管线连接1…

pp助手苹果版_生日助手时间管理软件免费版下载-生日助手倒计时app苹果版下载ios...

生日助手app是一款全新的时间管理软件&#xff0c;帮助你更好的进行时间管理快乐生活&#xff0c;能够帮助你准确提醒你想要设定的重要日子&#xff0c;app的功能服务支持除了日历以外&#xff0c;还有计算器、天气预报、倒计时还有星座等&#xff0c;非常实用哟。app能够帮助用…

Handler post用法整理

来自:http://www.eoeandroid.com/forum.php?modviewthread&tid197324 感谢原作者. /** 在这个demo中&#xff0c;整个过程如下&#xff1a;程序一启动&#xff0c;就把MyRunnable加入到消息队列中&#xff0c;android的handler是异步机制&#xff0c;所以在handler.post(n…

zabbix华为交换机模板_【教程】思科交换机镜像端口配置实例

关注我&#xff0c;你的眼睛会怀孕镜像口就是把思科交换机上的其他口的数据流量全部转到一个口或者两个口上&#xff0c;通常被用作排查问题或者获取数据流量。下面简单介绍下怎么配置源目的镜像口吧。1、使用telnet或者ssh连接到交换机上&#xff0c;可以使用连接工具&#xf…

linux中死锁的概念,【Linux】死锁概念总结

什么是死锁如果一组进程(或者线程)中的所有进程(或者线程)都在等待该组中其他进程(或者线程)才能引发的事件&#xff0c;那么这组进程(或者线程)就是死锁的死锁出现的情况举例(1)线程自锁&#xff0c;自己将自己锁住当进程(线程)第一次访问一个资源时&#xff0c;对该资源进行加…