Makefile 学习笔记
Make工程管理器
makefile文件的操作规则是:
如果这个工程没有编译过,所有C文件都要编译并被连接。
如果这个工程的某几个C文件被修改,只需编译被修改的C文件,并连接目标程序。
如果这个工程的头文件被改变了,需要编译引用了这几个头文件的C文件,并连接目标程序。
它的格式为:
目标列表:关联系列表(依赖关系列表)
<Tab>命令列表
如果一行写不完规则可使用反斜杠“/”换行续写
make 的命令行选项
-C dir:读入指定目录下的Makefile
-f file:读入当前目录下的file文件作为Makefile
-i:忽略所有的命令执行错误
-I dir:指定被包含的Makefile所在的目录
-n:只打印要执行的命令,但不执行这些命令
-p:显示Make变量数据库和隐含规则
-s:在执行命令时不显示命令
-w:如果Make在执行过程中改变目录,则打印当前目录名
如果直接运行Make,则建立Makefile中的第一个目标
Makefile中的变量分为:
用户自定义变量、预定义变量、自动变量、环境变量
推荐在Makefile内部使用小写字母作为变量名,预留大写字母作为控制隐含规则或用户重载命令选项参数的变量名。
在Makefile中的变量定义有两种方式:一种是递归展开方式,另一种时简单方式。
递归展开方式定义格式为:VAR=var。
简单展开方式定义格式为:VAR:=var。
Make中的变量格式为:$(VAR)
Makefile中常见的与定义变量
AR:库文件维护程序的名称,默认值为ar
AS:汇编程序的名称,默认值为as
CC:C编译器的名称,默认值为cc
CPP:C与编译器的名称,默认值为$(CC)-E
CXX:C++编译器的名称,默认值为g++
FC:FORTRAN编译器的名称,默认值为f77
RM:文件删除程序的名称,默认值为rm -f
ARFLAGS:库文件维护程序的选项,无默认值
ASFLAGS:汇编程序的选项,无默认值
CFLAGS:C编译器的选项,无默认值
CPPFLAGS:C预编译器的选项,无默认值
CXXFLAGS:C++编译器的选项,无默认值
FFLAGS:FORTRAN编译器的选项,无默认值
Makefile 中常见自动变量
$*:不包含扩展名的目标文件名称
$+:所有的依赖文件,以空格分开,并已出现的先后为序,可能包含重复的依赖文件
$<:第一个依赖文件的名称
$?:所有时间戳比目标文件晚的依赖文件,并以空格分开
$@:目标文件的完整名称
$^:所有不重复地依赖文件,以空格分开
$%:如果目标时归档成员,则该变量表示目标的归档成员名称
Makefile 中常见引式规则目录
对应语言后缀名 规则
C编译:“.c”变为“.o” $(CC) -c $(CPPFLAGS) $(CFLAGS)
C++编译:“.cc”或“.C”变为“.o” $(CXX) -c $(CPPFLAGS) $(CXXFLAGS)
Pascal编译:“.p”变为“.o” $(PC) -c $(PFLAGS)
Fortran编译:“.r”变为“.o” $(FC) -c $(FFLAGS)
模式规则