初识嵌入式系统(七)

姓名:张硕 学院:电子工程学院 学号:19020100006

转自:https://blog.csdn.net/qq_38612145/article/details/107567405

嵌牛导读:本文主要介绍Makefile基础、常见知识点以及其环境变量、通配符

嵌牛鼻子:嵌入式、Makefile

嵌牛提问:Makefile的自动变量如何表示?

嵌牛正文:

1.Makefile基础

Makefile的作用和意义

工程项目中C文件太多管理不方便,因此用Makefile来做项目管理,方便编译链接过程

uboot和Linux kernel本质都是C语言的项目,由多个文件组成,需要通过Makefile来管理

目标、依赖和命令

目标就是我们要去make xxx的xxx,就是我们最终要生成的文件

依赖是用来生成目录的原材料

命令就是加工方法

make xxx的过程就是使用命令将原材料加工成目标的过程。

通配符%和Makefile的自动推导(规则)

%是Makefile中的通配符,代表一个或几个字母,也就是说%.o就代表所有以.o为结尾的文件

所谓自动推导,就是当Makefile需要某一个目标时,它会把这个目标去套规则说明,一旦套上了某个规则说明,则Makefile会试图寻找这个规则中的依赖,如果能找到则会执行这个规则用依赖生成目标

Makefile中定义和使用变量

没有变量类型,直接定义使用,引用变量时$(var)

伪目标(.PHONY)

伪目标意思是这个目标本身不代表一个文件,执行这个目标是为了完成目标下面的命令

伪目标没有依赖,执行伪目标就是为了执行命令

伪目标可以直接写,不影响使用;有时候为了明确声明,会在伪目标前面加上.PHONY

Makefile的文件名

合法文件名可以为:Makefile和makefile

Makefile中引用其他makefile

有时候makefile比较复杂,会分成多个makefile来写,然后在主makefile中用include指令来引用,引用的效果也就是原地展开,和C语言中的头文件包含非常相似

2. Makefile常见知识点

makefile中使用#注释

在makefile的命令行中前面的@表示静默执行。在makefile中默认执行一行命令前会把这行命令打印出来,然后再执行,在命令前面加上@之后则不会打印

makefile中的变量赋值运算符

=:用=赋值的变量,在被解析时它的值取决于最后一次的赋值,变量引用的值要往后看

A = 123

B = $(A)456

A = abc

all:

echo $(B)

输出结果为:abc456

:=:直接赋值,不需要考虑后面的赋值。

A = 123

B := $(A)456

A = abc

all:

echo $(B)

输出结果为:123456

?=:如果变量前面没被赋值过,则执行这条赋值,如果赋值了则本行被忽略。(没有被赋值过其实就是这个变量没有被定义过)

+=:给一个已经赋值的变量接续赋值。在shell和makefile文件中,可以认为所有变量都是字符串,该符号相当于给字符串strcat,+=接续的内容之间会自动加一个空格隔开

makefile中并不要求赋值运算符两边一定要有空格或者无空格,比shell格式要求松一些

3.Makfile 环境变量

Makefile中用export导出的就是环境变量。一般情况下要求环境变量名用大写,普通变量名用小写

环境变量不同与普通变量,环境变量类似于整个工程中所有makefile之间可以共享的全局变量,而普通变量只是本makefile中使用的局部变量

makefile中可能有一些环境变量是makefile本身自己定义的内部的环境变量或者是当前的执行环境提供的环境变量。(譬如在make执行时给makefile传参,make CC=arm-linux-gcc,其实就是给makefile传了一个环境变量CC,值是arm-linux-gcc,在make时给makefile传的环境变量值优先级最高,可以覆盖makefile中的赋值。

4.makefile通配符

*:表示若干个任意字符

?:表示1个任意字符

[]:将[]中的字符依次去和外面的结合匹配

%也是通配符,表示任意多个字符,与*相似,但是%一般只用于规则描述中,又叫做规则通配符。

5. makefile的自动变量

自动变量就是预定义的特殊意义的符号,类似于C语言中预置的那些宏。在有些情况下文件集合中文件特别多,描述的时候很麻烦,所以在makefile中用一些特殊意义的符号

$@:规则的目标文件名

$<:规则的第一个依赖文件名

$^:依赖的文件集合

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容