文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>GNU Make 使用手册(中译版)(二)

GNU Make 使用手册(中译版)(二)

时间:2005-08-20  来源:thestones

这里是4-7章

4 编写规则

4.1规则的语法

4.2在文件名中使用通配符

4.2.1通配符例子

4.2.2使用通配符的常见错误

4.2.3函数wildcard

4.3在目录中搜寻依赖

4.3.1VPATH:所有依赖的搜寻路径

4.3.2vpath指令

4.3.3目录搜寻过程

4.3.4编写搜寻目录的shell命令

4.3.5目录搜寻和隐含规则

4.3.6连接库的搜寻目录

4.4假想目标

4.5没有命令或依赖的规则

4.6使用空目录文件记录事件

4.7内建的特殊目标名

4.8具有多个目标的规则

4.9具有多条规则的目标

4.10静态格式规则

4.10.1静态格式规则的语法

4.10.2静态格式规则和隐含规则

4.11双冒号规则

4.12自动生成依赖

5 在规则中使用命令

5.1命令回显

5.2执行命令

5.3并行执行

5.4命令错误

5.5中断或关闭make

5.6递归调用make

5.6.1变量MAKE的工作方式

5.6.2与子make通讯的变量

5.6.3与子make通讯的选项

5.6.4`--print-directory'选项

5.7定义固定次序命令

5.8使用空命令

6         使用变量

6.1变量引用基础

6.2变量的两个特色

6.3变量高级引用技术

6.3.1替换引用

6.3.2嵌套变量引用

6.4变量取值

6.5设置变量

6.6为变量值追加文本

6.7override指令

6.8定义多行变量

6.9环境变量

6.10特定目标变量的值

6.11特定格式变量的值

7 Makefile文件的条件语句

7.1条件语句的例子

7.2条件语句的语法

7.3测试标志的条件语句

4编写规则

makefile文件中的规则是用来说明何时以及怎样重建特定文件的,这些特定的文件称为该规则的目标(通常情况下,每个规则只有一个目标)。在规则中列举的其它文件称为目标的依赖,同时规则还给出了目标创建、更新的命令。一般情况下规则的次序无关紧要,但决定缺省最终目标时却是例外。缺省最终目标是您没有另外指定最终目标时,make认定的最终目标。缺省最终目标是makefile文件中的第一条规则的目标。如果第一条规则有多个目标,只有第一个目标被认为是缺省最终目标。有两种例外的情况:以句点(‘.’)开始的目标不是缺省最终目标(如果该目标包含一个或多个斜杠‘/’,则该目标也可能是缺省最终目标);另一种情况是格式规则定义的目标不是缺省最终目标(参阅定义与重新定义格式规则)。

所以,我们编写makefile文件时,通常将第一个规则的目标定为编译全部程序或是由makefile文件表述的所有程序(经常设定一个称为‘all’的目标)。参阅指定最终目标的参数。

4.1规则的语法

通常一条规则形式如下:

targets : prerequisites

        command

        ...

或:

targets : prerequisites ; command

        command

        ...

目标(target)是文件的名称,中间由空格隔开。通配符可以在文件名中使用(参阅在文件名中使用通配符),‘a(m)’形式的文件名表示成员m在文件a中(参阅档案成员目标)。一般情况下,一条规则只有一个目标,但偶尔由于其它原因一条规则有多个目标(参阅具有多个目标的规则)。

命令行以Tab字符开始,第一个命令可以和依赖在一行,命令和依赖之间用分号隔开,也可以在依赖下一行,以Tab字符为行的开始。这两种方法的效果一样,参阅在规则中使用命令。

因为美元符号已经用为变量引用的开始符,如果您真希望在规则中使用美元符号,您必须连写两次,‘$$’(参阅使用变量)。您可以把一长行在中间插入‘’使其分为两行,也就是说,一行的尾部是’’的话,表示下一行是本行的继续行。但这并不是必须的,make没有对makefile文件中行的长度进行限制。一条规则可以告诉make两件事情:何时目标已经过时,以及怎样在必要时更新它们。

判断目标过时的准则和依赖关系密切,依赖也由文件名构成,文件名之间由空格隔开,通配符和档案成员也允许在依赖中出现。一个目标如果不存在或它比其中一个依赖的修改时间早,则该目标已经过时。该思想来源于目标是根据依赖的信息计算得来的,因此一旦任何一个依赖发生变化,目标文件也就不再有效。目标的更新方式由命令决定。命令由shell解释执行,但也有一些另外的特点。参阅在规则中使用命令。

4.2 在文件名中使用通配符

一个简单的文件名可以通过使用通配符代表许多文件。Make中的通配符和Bourne shell中的通配符一样是‘*’、‘?’和‘[…]’。例如:‘*.C’指在当前目录中所有以‘.C’结尾的文件。

字符‘~’在文件名的前面也有特殊的含义。如果字符‘~’单独或后面跟一个斜杠‘/’,则代表您的home目录。如‘~/bin’扩展为‘/home/bin’。如果字符‘~’后面跟一个字,它扩展为home目录下以该字为名字的目录,如‘~John/bin’表示‘home/John/bin’。在一些操作系统(如ms-dos,ms-windows)中不存在home目录,可以通过设置环境变量home来模拟。

在目标、依赖和命令中的通配符自动扩展。在其它上下文中,通配符只有在您明确表明调用通配符函数时才扩展。

通配符另一个特点是如果通配符前面是反斜杠‘’,则该通配符失去通配能力。如‘foo*bar’表示一个特定的文件其名字由‘foo’、‘*’和‘bar’构成。

4.2.1通配符例子

    通配符可以用在规则的命令中,此时通配符由shell扩展。例如,下面的规则删除所有OBJ文件:

相关阅读 更多 +
排行榜 更多 +
试着飞手游下载

试着飞手游下载

休闲益智 下载
血染小镇(功能菜单)中文版下载

血染小镇(功能菜单)中文版下载

飞行射击 下载
泰坦之旅高爆版下载

泰坦之旅高爆版下载

角色扮演 下载