深圳嵌入式培训
达内深圳龙华中心

134-1646-6912

热门课程

深圳嵌入式培训班:Makefile变量_深圳达内龙校区

  • 时间:2017-07-24 20:27
  • 发布:深圳达内
  • 来源:达内新闻

深圳嵌入式培训的小编这一期给大家讲Makefile变量。

自定义变量

=是最基本的赋值,会把整个makefile展开之后再决定是多少x=foo

y=$(x)bar#y是asdbar,不是foobar

x=asd

:=是覆盖之前的值,和=不同,和赋值的位置有关

x=foo

y:=$(x)bar#y是foobar

x=asd

?=是如果没有被赋值过就赋予等号后面的值,赋过了就不管了+=是添加等号后面的值

变量的使用

和shell一样,makefile通过$(FLAGS)来读取变量FLAGS的值,对于$本身,使用$$读取变量替换

注意这两种替换的方式都得使用变量名,不能使用变量的内容,即不能写成诸如$($(VAR):o=a)的形式,其他返回内容的函数也不行,均会导致替换的失败makefile中有两种变量替换,

形如$(var:a=b)或者${var:a=b},是把var中以a结尾的变量替换为bOBJ=./obj/test.o

OBJ2=$(OBJ:o=a)

all:

@echo

"OBJ:$(OBJ)"

@echo

"OBJ2:$(OBJ2)"

#############################

$make all

OBJ:./obj/test.o

OBJ2:./obj/test.a

使用模式匹配的方式表示替换内容

OBJ=./obj/test.o

OBJ2=$(OBJ:%.o=%.a)

all:

@echo

"OBJ:$(OBJ)"

@echo

"OBJ2:$(OBJ2)"

############################

$make all

OBJ:./obj/test.o

OBJ2:./obj/test.a

自动化变量

?所有比目标新的依赖的集合,以空格分隔,通常用他们的值,即$?

@规则中的目标文件集,如果有多个目标,那么就是匹配于目标中模式定义的集合,通常用他们的值,即$@%仅当目标是函数库文件中,表示规则中的目标成员名,如果不是,为空,通常用他们的值,即$%<依赖目标中的第一个目标的名字,通常用他们的值,即$<^所有依赖目标的集合,以空格分隔,去除重复的依赖目标,通常用他们的值,即$^+所有依赖目标的集合,不去除重复的依赖目标,通常用他们的值,即$+*表示目标模式中%之前的部分,通常用他们的值,即$*@D表示@的目录部分(不以/结尾),通常用他们的值,即$(@D)@F表示@的文件部分,通常用他们的值,即$(@F)

。。。另外6个同理

环境变量

makefile会自动读取系统中的环境变量,并复制一份一模一样的,如果用户在makefile中定义的同名的变量,那么原来的环境变量就会被覆盖VPATH

虚路径,如果没有指明VPATH变量,make只会在当前目录中去寻找依赖文件和目标文件,如果定义了VPATH,则make会在当前目录找不到的情况下,到所制定的目录中去找文件,这个变VPATH=src:../headers

vpath

vpath是一个指令,可以用来搜索文件,通常有三种用法:

VPATH

<pattern> <directories>为符合模式<pattern>的文件指定搜索目录VPATH

<pattern>清除符合模式<pattern>的文件的搜索目录VPATH清除所有已被设置好了的文件搜索目录

这里,<pattern>需要包含%字符,eg: vpath%.h ../headers

如果多条vpath语句中出现了重复的<pattern>,则会按照先后顺序搜索print: *.c #依赖关系的通配符会被自动展开,表示print目标依赖于所有的.c文件object=*.c #变量中的通配符不会被展开object就是“.c”需要使用wildcard来展开

达内深圳校区温馨提示:如果你在阅读文章时碰到什么不清楚或不明白的地方,可以进行在线咨询;如果你需要报名,也可以通过在线预约,我们将免费为你安排,或者关注深圳达内微信公众平台:tarenasz(更多内容请点击:深圳嵌入式培训

深圳达内




上一篇:深圳arm培训班:嵌入式系统基础 - 深圳达内龙岗中心
下一篇:深圳嵌入式培训班:嵌入式操作系统如何走进物联网_深圳达内龙校区

马上预约三天免费体验课

姓名:

电话:

新手学嵌入式培训难不难?嵌入式培训课程有哪些

嵌入式培训哪家比较好?嵌入式培训学费多少

嵌入式培训哪家好?嵌入式软件工程师薪资多少

深圳嵌入式工程师常用工具有哪些

选择城市和中心
贵州省

广西省

海南省