您的位置:首页 > 其它

makefile include的作用

2015-08-26 20:17 260 查看


Makefile  include

(2011-05-26 16:46:23)


转载▼

标签:

杂谈

http://blog.sina.com.cn/s/blog_6cc850810100r8fr.html

分类:
嵌入式linux

本节我们讨论如何在一个 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)”被扩展为“bish bash”。则

      include foo *.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

文件的重建一节)  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  makefileinclude