Make 通过读入配置好的文本文件,并根据文本文件中预先定义的规则和步骤,完成代码的编译和链接工作,最终生成所需要的项目文件。这个文本文件在缺省情况下文件名为makefile或Makefile。
Make 程序支持的命令选项
-b 或 -m | 忽略兼容性 |
-B 或 –always-make | 无条件编译所有目标 |
-d | 打印调试信息 |
-e 或 --environment-overrides | 在makefile中不替换环境变量的值 |
-f FILE 或 --file=FILE 或 --makefile=FILE | 指定FILE文件为makefile |
-h 或 --help | 显示make命令帮助信息 |
-I 或 --ignore-errors | 忽略命令中的错误信息 |
-I DIRECTORY 或 --include-dir=DIRECTORY | 搜索指定目录中的makefile文件 |
-k 或 --keep-going | 即使某些目标无法编译,仍然继续编译工作 |
-o FILE, --old-file=FILE 或 --assume-old=FILE | 即使这些文件已经做过修改但仍然不编译该文件 |
-p 或 --print-data-base | 打印make 的内部数据库信息 |
-r 或 --no-builtin-rules | 禁用编译中的隐式规则 |
-s 或 --silent 或 --quiet | 不显示编译中的命令 |
-v 或 --version | 显示make 命令的版本号 |
make 中规定每一Shell命令之前的开头必须使用<tab>字符。
makefile 支持的预定义变量及其意义
变量名 | 含义 |
$@ | 表示当前规则中的目标文件名 |
$? | 新修改过的依赖文件列表 |
$* | 不包含扩展名的目标文件名 |
$< | 当前规则中的第一个依赖文件名 |
$% | 当目标文件为库文件时,该变量为库文件名;如果不是库文件,该变量为空值 |
$^ | 当前规则中的所有文件列表 |
AR | 归档程序名称,默认为AR |
ARFLAGS | 归档程序选项 |
CC | C编译器命令名,默认为CC |
CFLAGS | C 编译器编译参数 |
make的隐含规则:
将后缀为.c的文件编译为.o文件;
支持一个目标对应多个依赖模式,可根据不同的源文件(判断依据主要是文件的后缀),调用不同的编译器完成编译。在隐含规则中,对.c文件的隐含规则在对.p文件之前。
常见隐含规则列表
规则 | 说明 |
C程序编译 | .o文件自动由同名的.c文件生成,编译命令为: $(CC) -c $(CPPFLAGS) $(CFLAGS) |
C++ 程序编译 | .o 文件自动由同名的.cc或同名的.c文件生成,编译命令为: $(CXX) -c $(CPPFLAGS) $(CFLAGS), 也就是说如果要让make对C++代码执行隐含规则,C++代码的后缀必须为.cc 或 .c |
Pascal 程序编译 | .o 文件自动由同名的.p生成,编译命令为: $(PC) -c $(PFLAGS) &nbs |