美文网首页
Makefile自动化变量

Makefile自动化变量

作者: yiltoncent | 来源:发表于2015-03-23 16:58 被阅读367次

学习笔记,摘自陈皓的《跟我一起写 Makefile》

Makefile规则

Makefile文件由一系列规则构成。每条规则的形式如下:

<target> : <prerequisites>
[tab] <command>
  • 第一行冒号前面的部分,叫做“目标”,冒号后面的部分叫做“依赖条件”;
  • 第二行必须由一个tab键开始,后面跟着“命令”。

模式规则

可以使用模式规则来定义一个隐含规则。一个模式规则像一个一般的规则,只是在规则中,目标的定义需要有“%”字符。它的意思是表示一个或多个任意字符。在依赖目标中同样可以使用“%”,只是依赖目标中的“%”的取值,取决于其目标。也就是说,目标中的模式的“%”决定了依赖目标中“%”的样子。如:

    %.o : %.c

其含义是,指出了怎么从所有的[.c]文件生成相应的[.o]文件的规则。

自动化变量

所谓自动化变量,就是这种变量会把模式中所定义的一系列的文件自动地挨个取出,直到所有的符合模式的文件都取完了。这种自动化变量直营出现在规则的命令中。


目标
$@
表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配与目标中模式定义的集合。

$%
仅当目标是函数库文件时,"$%"表示规则中的目标成员名。如:如果目标是"foo.a(bar.o)",那么,"$%"就是"bar.o","%@"就是"foo.a"。如果目标不是函数库文件,那么其值为空。

$<
依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%")定义的,那么"%<"将是符合模式的一系列的文件集。注意,其是一个个取出来的。


依赖目标
$?
所有比目标新的依赖目标的集合。以空格分隔。

$^
所有的依赖目标的集合。以空格分隔。如果在依赖目标中有多个重复的,那么这个变量会取出重复的依赖目标,只保留一份。

$+
这个变量很像"$^",也是所有依赖目标的几何。只是它不去除重复的依赖目标。

$*
这个变量表示目标模式中"%"及之前的部分。如果目标的模式是"a.%.b",那么,"$*"的值是"dir/a.foo"。这个变量对于构造有关联的文件名是比较有效。
如果目标中没有模式的定义,那么"$*"也就不能被推导出来,但是,如果目标文件的后缀是make所识别的,那么"$*"的值就是"foo"。这个特性是GNU make的,很有可能不兼容其它版本的make,所以应尽量避免使用"$*"
如果目标中的后缀是make所不能识别的,那么"$*"就是空值。

相关文章

  • Makefile自动化变量

    学习笔记,摘自陈皓的《跟我一起写 Makefile》 Makefile规则 Makefile文件由一系列规则构成。...

  • makefile--变量的定义与使用

    makefile变量 makefile中支持程序设计语言中变量的概念 makefile中的变量只代表文本数据(字符...

  • Makefile简笔记

    一、Makefile 变量 #Makefile变量的使用 objects = main.o input.o cal...

  • Makefile的变量与规则(内建)

    Makefile的变量与规则(内建) 在Makefile中经常看到很多奇怪的变量,看起来Makefile高大上,看...

  • linux中的Makefile

    时间:2018-02-26 作者:魏文应 Makefile 的变量 下面是定义makefile: 然后引用变量:...

  • Makefile: 变量

    可能会被改变的数据,为了方便,我们一般将其存放在变量里。这样在改变时,只要改一个地方(变量定义或赋值的地方)就可以...

  • Makefile中 = 与 := 的区别

    1、“=” make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中...

  • Makefile学习笔记——5.变量

    1 前言 在Makefile中,变量的使用类似于C语言中的宏,在 Makefile 的目标、依赖、命令中引用变量的...

  • 一个Makefile的进化(一)

    一个Makefile的进化(一) 隐含规则、变量与Makefile的显示 这一篇对开篇的Makefile进行修改涉...

  • 1.linux学习之Makefile

    2.makefile变量 2.1变量引用方式 $(p)或者${p} 2.2递归展开变量(=) name = wu ...

网友评论

      本文标题:Makefile自动化变量

      本文链接:https://www.haomeiwen.com/subject/ckrgxttx.html