没有合适的资源?快使用搜索试试~ 我知道了~
首页全面解读GNU Make:构建自动化利器
全面解读GNU Make:构建自动化利器
需积分: 17 1 下载量 63 浏览量
更新于2024-08-02
收藏 638KB DOC 举报
"Make使用手册,中文,非常全面的讲解了Make工具的使用,适合学习和参考。" Make是构建自动化工具,它通过分析文件依赖关系,自动决定哪些文件需要重新编译,然后执行相应的编译命令。这个中文版的手册详细介绍了GNUMake,它遵循IEEE Standard 1003.2-1992(POSIX.2)标准,不仅适用于C语言程序,还能处理多种在Shell环境下运行的编程语言的项目。 Make的核心在于Makefile,这是一个配置文件,定义了程序中各个文件之间的依赖关系和更新命令。例如,当源文件被修改后,通过在命令行输入`make`,Make会检查目标文件(如可执行文件)与依赖的OBJ文件(编译后的对象文件)的时间戳,识别出哪些文件需要重新编译,然后执行相应的编译命令。 手册的阅读指南建议初学者从基础部分开始,逐步了解Make的基本概念和用法,而对于有经验的用户,则可以专注于GNU Make的特性和与其他Make程序的差异。手册的"选项概要"、"快速参考"和"内建的特殊目标名"部分则是快速掌握关键信息的入口。 在遇到问题或疑似BUG时,手册提示读者应先仔细阅读文档并确认问题所在,然后再向开发者报告,以便于问题的解决和软件的持续改进。这样的手册对于开发人员来说,是提高效率、理解和利用Make工具不可或缺的参考资料。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/1330005/bgb.jpg)
4444444
目标(+)是文件的名称,中间由空格隔开。通配符可以在文件名中使用(参阅
在文件
名中使用通配符
),‘ ()’形式的文件名表示成员 在文件 中(参阅
档案成员目
标
)。一般情况下,一条规则只有一个目标,但偶尔由于其它原因一条规则有多个目标
(参阅
具有多个目标的规则
)。
命令行以 7* 字符开始,第一个命令可以和依赖在一行,命令和依赖之间用分号隔开,也
可以在依赖下一行,以 7* 字符为行的开始。这两种方法的效果一样,参阅
在规则中使用
命令
。
因为美元符号已经用为变量引用的开始符,如果您真希望在规则中使用美元符号,您必须
连写两次,‘==’(参阅
使用变量
)。 您可以把一长行在中间插入‘6’使其分为两行,也就是
说,一行的尾部是’6’的话,表示下一行是本行的继续行。但这并不是必须的, 没有对
$ 文件中行的长度进行限制。一条规则可以告诉 两件事情:何时目标已经过时,
以及怎样在必要时更新它们。
判断目标过时的准则和依赖关系密切,依赖也由文件名构成,文件名之间由空格隔开,通
配符和档案成员也允许在依赖中出现。一个目标如果不存在或它比其中一个依赖的修改时
间早,则该目标已经过时。该思想来源于目标是根据依赖的信息计算得来的,因此一旦任
何一个依赖发生变化,目标文件也就不再有效。目标的更新方式由命令决定。命令由 '
解释执行,但也有一些另外的特点。参阅
在规则中使用命令
。
4.2 在文件名中使用通配符
一个简单的文件名可以通过使用通配符代表许多文件。 中的通配符和 %' 中
的通配符一样是‘C’、‘?’和‘ M…N’。例如:‘C#’指在当前目录中所有以‘#’结尾的文件。
字符‘O’在文件名的前面也有特殊的含义。如果字符‘O’单独或后面跟一个斜杠‘D’,则代表您
的 目录。如‘OD*’扩展为‘DD*’。如果字符‘O’后面跟一个字,它扩展为 目
录下以该字为名字的目录,如‘O&D*’表示‘D&D*’。在一些操作系统(如 ')
',')PP')中不存在 目录,可以通过设置环境变量 来模拟。
在目标、依赖和命令中的通配符自动扩展。在其它上下文中,通配符只有在您明确表明调
用通配符函数时才扩展。
通配符另一个特点是如果通配符前面是反斜杠‘6’,则该通配符失去通配能力。如‘$6C*’
表示一个特定的文件其名字由‘$’、‘ C’和‘*’构成。
4.2.1 通配符例子
444通配符可以用在规则的命令中,此时通配符由 ' 扩展。例如,下面的规则删除所有
%& 文件:
:
444–$4C
444通配符在规则的依赖中也很有用。在下面的 $ 规则中,‘0’将打印所有从
上次您打印以后又有改动的‘’文件:
0/C
44444440)0=K
44444440
本规则使用‘0’作为一个空目标文件(参看
使用空目标文件记录事件
);自动变量‘ =K’用
来打印那些已经修改的文件,参看
自动变量
。
当您定义一个变量时通配符不会扩展,如果您这样写:
*9';C
变量 *9' 的值实际就是字符串‘C’。然而,如果您在一个目标、依赖和命令中使用变量
![](https://csdnimg.cn/release/download_crawler_static/1330005/bgc.jpg)
*9' 的值,通配符将在那时扩展。使用下面的语句可使通配符扩展:
*9';=PC"
详细内容参阅
函数
wildcard。
4.2.2 使用通配符的常见错误
下面有一个幼稚使用通配符扩展的例子,但实际上该例子不能完成您所希望完成的任务。
假设可执行文件‘$’由在当前目录的所有 %& 文件创建,其规则如下:
*9';C
$/=*9'"
4444444)$=#GHB"=*9'"
由于变量 *9' 的值为字符串‘C’,通配符在目标‘$’的规则下扩展,所以每一个 %& 文
件都会变为目标‘$’的依赖,并在必要时重新编译自己。
但如果您已删除了所有的 %& 文件,情况又会怎样呢?因没有和通配符匹配的文件,所以
目标‘$’就依靠了一个有着奇怪名字的文件‘C’。因为目录中不存在该文件, 将发出
不能创建‘C’的错误信息。这可不是所要执行的任务。
实际上,使用通配符获得正确的结果是可能的,但您必须使用稍微复杂一点的技术,该技
术包括使用函数 P 和替代字符串等。详细内容将在下一节论述。
微软的操作系统()、)QQ)使用反斜杠分离目录路径,如:
#/6$6*6*
这和 R风格‘/D$D*D*’等价(‘/’是驱动器字母)。当 在这些系统上运行时,
不但支持在路径中存在反斜杠也支持 R 风格的前斜杠。但是这种对反斜杠的支持不包
括通配符扩展,因为通配符扩展时,反斜杠用作引用字符。所以,在这些场合您必须使用
R 风格的前斜杠。
4.2.3 函数 wildcard
通配符在规则中可以自动扩展,但设置在变量中或在函数的参数中通配符一般不能正常扩
展。如果您需要在这些场合扩展通配符,您应该使用函数 P,格式如下:
=Ppattern"
可以在 $文件的任何地方使用该字符串,应用时该字符串被一列在指定目录下存在
的并且文件名和给出的文件名的格式相符合的文件所代替,文件名中间由空格隔开。如果
没有和指定格式一致的文件,则函数 P 的输出将会省略。注意这和在规则中通配符
扩展的方式不同,在规则中使用逐字扩展方式,而不是省略方式(参阅上节)。
使用函数 P 得到指定目录下所有的 # 语言源程序文件名的命令格式为:
=PC"
我们可以把所获得的 # 语言源程序文件名的字符串通过将‘’后缀变为‘’转换为 %& 文件
名的字符串,其格式为:
=0'*'I:I:=PC""
这里我们使用了另外一个函数:0'*',详细内容参阅
字符串替换和分析函数
。
这样,一个编译特定目录下所有 # 语言源程序并把它们连接在一起的 $ 文件可以写
成如下格式:
*9'/;=0'*'I:I:=PC""
$/=*9'"
4444444)$=*9'"
这里使用了编译 # 语言源程序的隐含规则,因此没有必要为每个文件写具体编译规则。 ‘/
;’是‘;’的变异,对‘/;’的解释,参阅
两种风格的变量
。
4.3 在目录中搜寻依赖
![](https://csdnimg.cn/release/download_crawler_static/1330005/bgd.jpg)
对于大型系统,把源文件安放在一个单独的目录中,而把二进制文件放在另一个目录中是
十分常见的。的目录搜寻特性使自动在几个目录搜寻依赖十分容易。当您在几个目录
中重新安排您的文件,您不必改动单独的规则,仅仅改动一下搜寻路径即可。
4.3.1 VPATH:所有依赖的搜寻路径
变量 B7? 的值指定了 搜寻的目录。经常用到的是那些包含依赖的目录,并不
是当前的目录;但 B7? 指定了 对所有文件都适用的目录搜寻序列,包括了规则的
目标所需要的文件。
如果一个作为目标或依赖的文件在当前目录中不存在, 就会在 B7? 指定的目录中
搜寻该文件。如果在这些目录中找到要寻找的文件,则就象这些文件在当前目录下存在一
样,规则把这些文件指定为依赖。参阅
编写搜寻目录的
shell
命令
。
在 B7? 变量定义中,目录的名字由冒号或空格分开。目录列举的次序也是 搜寻的
次序。在 )、)QQ 系统中,B7? 变量定义中的目录的名字由分号分开,
因为在这些系统中,冒号用为路径名的一部分(通常在驱动器字母后面)。例如:
444B7?;'/D'
指定了两个目录,‘'’和‘…D'’, 也按照这个次序进行搜寻。使用该 B7? 的值,
下面的规则,
444$/$
在执行时就象如下写法一样会被中断:
$/'D$
然后在 ' 目录下搜寻 $。
4.3.2 vpath 指令
-0 指令(注意字母是小写)和 B7? 变量类似,但却更具灵活性。-0 指令允许对
符合一定格式类型的文件名指定一个搜寻路径。这样您就可以对一种格式类型的文件名指
定一个搜寻路径,对另外格式类型的文件名指定另外一个搜寻路径。总共由三种形式的
-0 指令:
vpath pattern directories
对一定格式类型的文件名指定一个搜寻路径。搜寻的路径由一列要搜寻的目录构成,目录
由冒号(在 MS-DOS、MS-WINDOWS 系统中用分号)或空格隔开,和 VPATH 变量定义
要搜寻的路径格式一样。
vpath pattern
清除和一定类型格式相联系的搜寻路径。
vpath
清除所有前面由 vapth 指令指定的搜寻路径。
一个 -0 的格式 0 是一个包含一个’I’的字符串。该字符串必须和正搜寻的一个依赖
的文件名匹配,字符I可和任何字符串匹配(关于格式规则,参阅
定义与重新定义格式规
则
)。例如, I 和任何文件名以 结尾的文件匹配。如果不使用‘I’,格式必须与依赖
精确匹配,这种情况很少使用。
在 -0 指令格式中的字符‘I’可以通过前面的反斜杠被引用。引用其它字符‘I’的反斜杠也
可以被更多的反斜杠引用。引用字符‘I’和其它反斜杠的反斜杠在和文件名比较之前和格式
是分开的。如果反斜杠所引用的字符‘I’没有错误,则该反斜杠不会运行带来任何危害。
如果 -0 指令格式和一个依赖的文件名匹配,并且在当前目录中该依赖不存在,则 -0
指令中指定的目录和 B7? 变量中的目录一样可以被搜寻。例如:
剩余63页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/c27ec0f080ad4b2a909767be948b7c6f_zhufuligood.jpg!1)
zhufuligood
- 粉丝: 2
- 资源: 2
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)