没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
FreeBSD 系统编程
目录
第一章: FreeBSD 的 Make
第二章: BSD 自举
第三章: 进程和内核服务
第四章: 高级进程控制和信号
第五章: 基本 I/O
第六章: 高级 I/O
第七章: 进程资源和系统限制
第八章: FreeBSD 5.x
第一章 FreeBSD 的 make
1.1 FreeBSD 的 make
作为常用的和基本的 软件开发工具, 是一个可以跟踪全部的文件依赖关系的非常好的簿记工具
程序。要管理依赖关系这样的项目细节常常需要花费很多的时间,甚至会拖延开发进度。当多个开发人员
合作一个项目的时候,依赖关系的跟踪就可能变得相当困难了。事实上,正确地使用 可以帮助我们
加快应用程序的开发,从而提高生产效率。
虽然 最初的设计是用来对应用程序版本构建的维护过程进行管理的,我们实际上还可以通过创建一
系列的基于目标依赖关系的 命令来让 完成多种多样的额外工作。这些依赖关系可以用很
多种方式定义——包括需要进行编译的源文件、所需的库文件、 命令以及其它的目标。
有多种风格的版本,其中包括 和 。并不是在每个 版本中都有
我们接下来讨论的那些特性,具体使用哪个版本完全取决于你的个人喜好。我们将主要关注跟随
一起发布的 (也叫做 或 ),尤其是如何通过它来编译和更新 系统,也就
是所谓的 。虽然我们关注的是 ,但我们在这里讨论的所有东西对于各种
版本来说都是适用的。
我们首先会讲述一个 的基本文件布局和语法。如果这对于你来说太简单了,那你可以直接跳到本
章结束处的示例部分去阅读。(注意,我们给出的代码示例只用于演示我们关于 目标和依赖关系的
讨论,它们并不一定是可以运行的代码。)
当然,和其它工具程序一样,最开始应该先去看看 ,以对 提供的命令行选项的概要和细
节有一个正式的了解。同时,和其它工具程序一样,学习 的最好方法就是使用它。创建一些小型的
源文件(可以使用任何语言),然后尝试一些下面给出的例子。我们希望读完本章之后你除了理解
的语法规则之外,还知道它是如何工作的。
1.2 Makele 布局
总的说来,你使用 的方式就是让它去读一个 ,你需要在 里指定一个目标及其依
赖关系。在运行的时候, 会按顺序搜索名字为 或 的文件。这个 通常
是放在一个工程的根目录下的,如果想指定其它的 ,可以在命令行上用 !"的选项给出。
[Copy to clipboard] [ - ]
CODE:
#
1.3 语法
一个 的结构由四个基本行组成,它们都可以通过在行尾添加‘$%字符来扩展到下一行(和 编
程相似)。注释是以‘&%号开始的,至行尾结束。
[Copy to clipboard] [ - ]
CODE:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&'&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&()*('
+
,,'--
要使用 来编译一个工程,首先需要确定在你的当前工作目录中已有一个正确的 ,然后再通
过下列命令之一来使用 :
[Copy to clipboard] [ - ]
CODE:
.,,
.
./0
1.4 目标
用来指定目标的方式有很多种,不过最常用的就是用目标文件或一个工程的名字。工程名字不应当包含有
空格或标点符号,不过这只是个惯例而已;少量的空格和标点符号也是允许的。这个名字必须写在一个新
行的开头,必须以单冒号(+)、双冒号(++)或感叹号(1)三者之一结束。
[Copy to clipboard] [ - ]
CODE:
+
,,,,/''0
++
,,,,/''0
1
,,,,/''0
在这些目标名字之后是所需的依赖条件,包括名字、变量以及其它的目标等等。如果你的依赖条件太多的
话,可以用一个‘$%和一个 来将它们分开。所有的依赖条件都必须 内定义或者存在于某个
外部文件中,否则 将无法知道如何去完成依赖操作。
一些示例如下:
[Copy to clipboard] [ - ]
CODE:
+23'4'3'44'3'43'443'
+3
3+
上例中, 和 3 是要 的目标。注意 3 既是一个目标又是一个依赖条件。
首先会到 3 那儿,执行它的命令,然后返回到 那儿,再执行它的命令。这种操作序列是
的功能基础。
按照惯例,+目标是你的目标中的最高者,这意味着 将从这儿开始去寻找要完成 +目标都需要哪
些东西。不过 +目标并不是必需的,如果没有的话, 就会简单地选择所有列出的目标中的第一个,
只对其实施操作,除非你在命令行上指定了某个目标。对于那些有一个核心的应用程序需要维护和构建的
工程来说,我们建议你使用 +目标;这是一个通用的惯例,有助于避免错误和不必要的任务。
上例所示的依赖序列只是很简单的一个。下面是一个更为复杂和灵活的依赖序列,我们没有给出用于具体
目标的命令:
[Copy to clipboard] [ - ]
CODE:
+3
+
+
3+3
注意,在这个例子中,+目标有两个依赖条件:3 和 。这两个依赖条件本身又都是目标,
将首先去编译 3。在 编译 3 的时候,会发现有一个和 3 的依赖关系。
3 并没有在这个 里定义,但 3 却是一个在当前目录中的头文件。
用于 3 的命令完成之后, 即返回到 +处,继续处理下一个依赖条件,在此例中是 。依
赖条件 本身也有一个依赖条件 ,所以 在完成 之前会先去完成 +。
注意:正如你所看到的,这些依赖关系可能会非常长,或者嵌套得很深。如果你有一个很大的 ,
那一定要好好地组织一下,把目标的顺序弄好。
1.5 求值规则
依赖关系是按照依赖于目标名字结束符号的严格规则来求值的。一旦 认为满足规则,它将通过执行
相应的命令来创建特定的目标(比如编译该目标)。例如,使用单冒号+可以让你对需要进行编译的目标进
行更为精细的控制。也就是说,你可以指定某个特定的目标文件每次都需要重新编译或者仅当它的源文件
过时之后才编译。这些规则都是基于目标名字的结束符号的,如下:
如果目标名字以单冒号(+)结束,它将根据以下两个规则来创建:
53 如果目标尚未存在,就像我们在上面举的例子里的 +一样, 就会创建它。
63 如果任意一个源文件具有比当前目标更新的时间戳。在上例中如果 3 或 3' 具有更新
的时间戳,3 就会被 。这种情况只需简单地用一下 (' 命令即可出现
[Copy to clipboard] [ - ]
CODE:
,,('3'
如果目标名字以双冒号(++)结束,它将根据以下三个规则来创建:
53 如果任意一个源文件具有比当前目标更新地时间戳。
63 该目标不存在。
73 该目标没有与之关联的源文件。
如果目标名字以感叹号(1)结束,只要 把它所需的全部依赖条件都创建完毕就会来创建它。
你只能在目标或源文件的最后一个组成部分中使用通配表达式8、9和:;,而且只能用于描述已经存在的文
件。比如:
[Copy to clipboard] [ - ]
CODE:
3:';
而使用花括号<=的表达式则不一定非得描述已经存在的文件。比如:
[Copy to clipboard] [ - ]
CODE:
<)=3
&2('33
最后需要注意一点:可变表达式是按照目录顺序来处理的,而非字母顺序,就跟在 表达式中一样。例
如,如果你的目标有某些基于字母顺序的依赖条件,下面这个表达式可能就不对了:
[Copy to clipboard] [ - ]
CODE:
<)))'=3'
1.6 变量
能够使用变量这一点是非常重要的。例如,你有一个名字为 3' 的源文件,由于某种原因你想把它
的名字改成 3'。通常情况下,你得把你的 里的每个 3' 的实例都改成 3'。但是,如果你写成
以下方式:
剩余63页未读,继续阅读
资源评论
智慧安全方案
- 粉丝: 3782
- 资源: 59万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Python与多语言开发的B2C电子商城设计源码
- 相关向量机和特征选取技术在短期负荷预测中的应用(Matlab复现) 模型复现《相关向量机和特征选取技术在短期负荷预测中的应用》
- 基于Java的个人代码库与工具链设计源码
- 基于Vue的色板管理系统设计源码
- MATLAB轴承动力学代码(正常、外圈故障、内圈故障、滚动体故障),根据滚动轴承故障机理建模(含数学方程建立和公式推导)并在MA
- 基于SpringBoot框架的Shiro权限控制设计源码
- 基于Java语言的SpringSecurity框架设计源码学习仓库
- 基于Java语言的煤炭行业登录系统设计源码
- 基于ROS的北京六部工坊启智机器人开源设计源码
- 基于Vue框架的点餐小程序设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功