Makefile include

本节我们讨论如何在一个 Makefile 中包含其它的 makefile 文件。Makefile 中包含其它文件
的关键字是“include”,和 C 语言对头文件的包含方式一致。

“include”指示符告诉 make 暂停读取当前的 Makefile,而转去读取“include”指定的一

个或者多个文件,完成以后再继续当前 Makefile 的读取。Makefile 中指示符“include”书写在
独立的一行,其形式如下:

  include FILENAMES...

FILENAMES 是 shell 所支持的文件名(可以使用通配符)。

指示符“include”所在的行可以一个或者多个空格(make程序在处理时将忽略这些空格)开
始,切忌不能以 [Tab] 字符开始(如果一行以 [Tab] 字符开始 make 程序将此行作为一个命令行来处
理)。指示符“include”和文件名之间、多个文件之间使用空格或者 [Tab] 键隔开。行尾的空白字
符在处理时被忽略。使用指示符包含进来的 Makefile 中,如果存在变量或者函数的引用。它们将会
在包含它们的 Makefile 中被展开(详细可参考第五章 Makefile 中的变量)。

来看一个例子,存在三个.mk 文件,“ (bar)bishbashincludefoo.mk (bar)
等价于
include foo a.mk b.mk c.mk bish bash
make 程序在处理指示符 include 时,将暂停对当前使用指示符“include”的 makefile 文件
的读取,而转去依此读取由“include”指示符指定的文件列表。直到完成所有这些文件以后再回
过头继续读取指示符“include”所在的 makefile 文件。
通常指示符“include”用在以下场合:
1. 有多个不同的程序,由不同目录下的几个独立的Makefile来描述其创建或者更新规则。它
们需要使用一组通用的变量定义(可参考 5.5 如何设置变量 一节)或者模式规则(可参
考 9.5 模式规则 一节) 。通用的做法是将这些共同使用的变量或者模式规则定义在一个文
件中(没有具体的文件命名限制) ,在需要使用的Makefile中使用指示符“include”来包
含此文件。
2. 当根据源文件自动产生依赖文件时;我们可以将自动产生的依赖关系保存在另外一个文件
中,主Makefile使用指示符“include”包含这些文件。这样的做法比直接在主Makefile
中追加依赖文件的方法要明智的多。其它版本的make已经使用这种方式来处理。 (参考
3.14 自动产生依赖 一节)
如果指示符“include”指定的文件不是以斜线开始(绝对路径,如/usr/src/Makefile…) ,
而且当前目录下也不存在此文件;make将根据文件名试图在以下几个目录下查找:首先,查找使
(参考 8.7make的命令行选项 一节)指定的目录,如
用命令行选项“-I”或者“–include-dir”
果找到指定的文件,则使用这个文件;否则依此搜索以下几个目录(如果其存在) :
“/usr/gnu/include”“/usr/local/include”和“/usr/include”
、 。 当在这些目录下都没有找到“include”指定的文件时,make将会提示一个包含文件未找到的
告警提示, 但是不会立刻退出。 而是继续处理Makefile的内容。 当完成读取所有的makefile文件后,
make将试图使用规则来创建通过指示符“include”指定的但未找到的文件(参考 2.7 makefile
文件的重建 一节) ,当不能创建它时(没有创建这个文件的规则) ,make将提示致命错误并退出。
会输出类似如下错误提示:
Makefile:错误的行数:未找到文件名:提示信息(No such file or directory)
Make: * No rule to make target ‘’. Stop
我们可使用“-include”来代替“include” ,忽略由于包含文件不存在或者无法创建时的错误
“-”的意思是告诉 make,忽略此操作的错误。make 继续执行)
提示( 。像下边那样:
-include FILENAMES…
使用这种方式时,当所要包含的文件不存在时不会有错误提示、make 也不会退出;除此之外,
和第一种方式效果相同。以下是这两种方式的比较:
使用“include FILENAMES…” ,make 程序处理时,如果“FILENAMES”列表中的任何一
个文件不能正常读取而且不存在一个创建此文件的规则时 make 程序将会提示错误并退出。
使用“-include FILENAMES…”的情况是,当所包含的文件不存在或者不存在一个规则去创
建它,make 程序会继续执行,只有在因为 makefile 的目标的规则不存在时,才会提示致命错误
并退出。
为了和其它的 make 程序进行兼容。也可以使用“sinclude”来代替“-include” (GNU 所支
持的方式) 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值