首页
登录 | 注册

linux中make的有关规则的特性

我过去认为 makefile 只是一种将一组组的 shell 命令列出来的简便方法;过了一段时间我了解到它们是有多么的强大、灵活以及功能齐全。这篇文章带你领略其中一些有关规则的特性。

规则

规则是指示 make 应该如何并且何时构建一个被称作为目标的文件的指令。目标可以依赖于其它被称作为前提的文件。

你会指示 make 如何按步骤构建目标,那就是一套按照出现顺序一次执行一个的 shell 命令。语法像这样:

target_name : prerequisites
recipe

一但你定义好了规则,你就可以通过从命令行执行以下命令构建目标:

$ make target_name

目标一经构建,除非前提改变,否则 make 会足够聪明地不再去运行该步骤。

关于前提的更多信息

前提表明了两件事情:

  • 当目标应当被构建时:如果其中一个前提比目标更新,make 假定目的应当被构建。
  • 执行的顺序:鉴于前提可以反过来在 makefile 中由另一套规则所构建,它们同样暗示了一个执行规则的顺序。

如果你想要定义一个顺序但是你不想在前提改变的时候重新构建目标,你可以使用一种特别的叫做“唯顺序”的前提。这种前提可以被放在普通的前提之后,用管道符(|)进行分隔。

样式

为了便利,make 接受目标和前提的样式。通过包含 % 符号可以定义一种样式。这个符号是一个可以匹配任何长度的文字符号或者空隔的通配符。以下有一些示例:

  • %:匹配任何文件
  • %.md:匹配所有 .md结尾的文件
  • prefix%.go:匹配所有以 prefix 开头以 .go结尾的文件
特殊目标

有一系列目标名字,它们对于 make 来说有特殊的意义,被称作特殊目标。

你可以在这个文档发现全套特殊目标。作为一种经验法则,特殊目标以点开始后面跟着大写字母。

以下是几个有用的特殊目标:

  • .PHONY:向 make 表明此目标的前提可以被当成伪目标。这意味着 make将总是运行,无论有那个名字的文件是否存在或者上次被修改的时间是什么。
  • .DEFAULT:被用于任何没有指定规则的目标。
  • .IGNORE:如果你指定 .IGNORE 为前提,make将忽略执行步骤中的错误。
替代

当你需要以你指定的改动方式改变一个变量的值,替代就十分有用了。

替代的格式是 $(var:a=b),它的意思是获取变量 var 的值,用值里面的 b 替代词末尾的每个 a 以代替最终的字符串。例如:

foo := a.obar : = $(foo:.o=.c) # sets bar to a.c
档案文件

档案文件是用来一起将多个数据文档(类似于压缩文件的概念)收集成一个文件。它们由 ar Unix 工具所构建。ar 可以用于为任何目的创建档案,但除了静态库,它已经被 tar 大量替代。

在 make 中,你可以使用一个档案文件中的单独一个成员作为目标或者前提,就像这样:

archive(member) : prerequisite 
recipe



相关文章

  • Linux中什么是动态网站环境及如何部署
    Linux中什么是动态网站环境及如何部署 当谈论起网站时,我们可能听说过静态和动态这两个词,但却不知道它们的含义,或者从字面意思了解一些却不知道它们的区别.   这一切可以追溯到网站和网络应用程序,Web应用程序是一个网站,但很多网站不是W ...
  • 原文地址:Linux内核对per-cpu变量的实现 作者:MagicBoy2010 在Linux中,per-cpu变量用在多处理器系统中,用来为系统中的每个cpu都生成一个变量的副本,以避开多处理器互斥中的加锁问题,另一个是cpu本地的变量 ...
  • 再谈如何学习Linux,一线Linux专家学习经验谈
    记得最早接触linux是在2000年,那个时候,还在上大学,一个同学从荷兰回来,带回来了一个Linux的拷贝版,记得版本还是Redhat6.2.曾经为安装一个系统让我们忘记疲劳,挑灯夜战,不亦乐乎.那时Linux的学习资料还很少,能够学习的 ...
  • 原文地址:http://blog.chinaunix.net/uid-26000137-id-3990647.html linux paging init 分析 谨以此文纪念过往岁月 一.   前言 Linux中内存管理机制是一个很大的内容 ...
  • Linux  I2C驱动分析(一)----I2C架构和总线驱动
    一.I2C总线原理         I2C是一种常用的串行总线,由串行数据线SDA 和串线时钟线SCL组成.I2C是一种多主机控制总线,它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以,而 I ...

2019 unjeep.com webmaster#unjeep.com
12 q. 0.014 s.
京ICP备10005923号