![](https://csdnimg.cn/release/download_crawler_static/9865671/bgf.jpg)
跟我一起写 Makefile 作者:陈皓
二、Makefile 的文件名
默认的情况下,make 命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、
“makefile”、“Makefile”的文件,找到了解释这个文件。在这三个文件名中,最好使用
“Makefile”这个文件名,因为,这个文件名第一个字符为大写,这样有一种显目的感觉。
最好不要用“GNUmakefile”,这个文件是 GNU 的 make 识别的。有另外一些 make 只对全小
写的“makefile”文件名敏感,但是基本上来说,大多数的 make 都支持“makefile”和
“Makefile”这两种默认文件名。
当然,你可以使用别的文件名来书写 Makefile,比如:“Make.Linux” ,
“Make.Solaris”,“Make.AIX”等,如果要指定特定的 Makefile,你可以使用 make 的
“-f”和“--file”参数,如:make -f Make.Linux 或 make --file Make.AIX。
三、引用其它的 Makefile
在 Makefile 使用 include 关键字可以把别的 Makefile 包含进来,这很像 C 语言的
#include,被包含的文件会原模原样的放在当前文件的包含位置。include 的语法是:
include <filename>
filename 可以是当前操作系统 Shell 的文件模式(可以保含路径和通配符) 在 include
前面可以有一些空字符,但是绝不能是[Tab]键开始。include 和<filename>可以用一个或
多个空格隔开。举个例子,你有这样几个 Makefile:a.mk、b.mk、c.mk,还有一个文件叫
foo.make,以及一个变量$(bar),其包含了 e.mk 和 f.mk,那么,下面的语句:
include foo.make *.mk $(bar)
等价于:
include foo.make a.mk b.mk c.mk e.mk f.mk
make 命令开始时,会把找寻 include 所指出的其它 Makefile,并把其内容安置在当前
的位。就好像 C/C++的#include 指令一样。如果文件都没有指定绝对路径或是相对路径的话,
make 会在当前目录下首先寻找,如果当前目录下没有找到,那么,make 还会在下面的几个
目录下找:
1、如果 make 执行时,有“-I”或“--include-dir”参数,那么 make 就会在这个参数
所指定的目录下去寻找。
2、如果目录<prefix>/include(一般是:/usr/local/bin 或/usr/include)存在的话,
make 也会去找。如果有文件没有找到的话,make 会生成一条警告信息,但不会马上出现致
命错误。它会继续载入其它的文件,一旦完成 makefile 的读取,make 会再重试这些没有找
到,或是不能读取的文件,如果还是不行,make 才会出现一条致命信息。如果你想让 make
不理那些无法读取的文件,而继续执行,你可以在 include 前加一个减号“-”。
第 15 页共 78 页 2005 年 10 月 14 日整理:祝冬华