以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。
Makefile 中包含其他的文件,使用的关键字是 "include"。
make 读取到 "include" 关键字时,会暂停读取当前的 Makefile,转去读取 "include" 包含的文件,读取结束后再继读取当前的 Makefile 文件。
1、include的使用方法
"include" 使用的具体方式如下:
include <filenames>
filenames 是 shell 支持的文件名(可以使用通配符表示的文件)。
"include" 关键字所在的行首可以包含空格(读取的时候空格会被自动的忽略),但不能使用 Tab 开始,否则会把 "include" 当作式命令来处理。包含的多个文件之间要使用空格分隔开。
使用 "include" 包含进来的文件中如果存在函数或者是变量的引用,它们会在Makefile 中展开。
2、include 的使用场合
在一个工程文件中,每一个模块都有一个独立的 Makefile 来描述它的重建规则。它们需要定义一组通用的变量定义或者是模式规则。通用的做法是将这些共同使用的变量或者模式规则定义在一个文件中,需要的时候用 "include" 包含这个文件。
或者,当根据源文件自动产生依赖文件时,我们可以将自动产生的依赖关系保存在另一个文件中,然后在 Makefile 中包含该文件。
3、-include的使用方法
如果使用 "include" 包含文件时,没有给出文件的绝对路径,make 将会这样寻找文件:在执行 make 命令的时候,如果加入了选项 "-I" 或 "--include-dir"来指定路径,则路径下存在文件的话则会被使用,不存在则接着在"usr/gnu/include"、"usr/local/include" 和 "usr/include"这些路径中搜索。
如果在上面的路径中都没有找到 "include" 指定的文件,make 将会提示一个文件没有找到的警示提示,但是不会退出,而是继续执行 Makefile 的后续的内容。当完成读取整个 Makefile 后,make 将试图使用规则来创建通过 "include" 指定但不存在的文件。当不能创建的时候,文件将会保存退出。
通常用 "-include" 来代替 "include",以忽略文件不存在或者无法创建的错误提示,使用格式如下:
-include <filename>
使用方法和 "include" 的使用方法相同。
这两种方式之间的区别:
- 使用 "include <filenames>" ,make 在处理程序的时候,文件列表中的任意一个文件不存在的时候或者是没有规则去创建这个文件的时候,make 程序将会提示错误并保存退出。
- 使用 "-include <filenames>",当包含的文件不存在或者是没有规则去创建它的时候,make 将会继续执行程序,只有真正由于不能完成终极目标重建的时候我们的程序才会提示错误保存退出。