(一).Makefile里面包含五个东西
1.显式规则 - 明显的目标,依赖文件 ,命令
2.隐晦规则 - 自动推导
3.变量的定义 - 字符串,像C的宏
4.文件指示 - ①Makefile中引用另一个Makefile,像include②根据情况指定有效部分,像#if③定义一个多行命
令
5.注释 - 用“#”进行行注释
(二).Makefile的文件名
1.默认情况下:GNUmakefile makefile Makefile三个文件名最好使用Makefile
2.可以使用别的文件名:Make.Linux Make.Solaris Make.AIX
3.使用特定的Makefile:使用-f和--file参数 make -f Make.Linux make --file Make.AIX
(三)引用其他的Makefile
1.include foo.mk a.mk b.mk c.mk e.mk f.mk ------不能以tab开始
¥(bar) = e.mk f.mk
等价于 include foo.mk *.mk ¥(bar)
①make执行时,无绝对或相对路径,make会在当前目录找,有“-I”或“--include-dir”参数,会在参数指定的目录找
②<prefix>/include(一般是:/usr/local/bin或者/usr/include)存在的话,make也会去找
make找不到先生成 警告信息,完成make的读取后,重试去找没有找到的文件,仍旧没有找到出现致命的信息,如果想让make无视这些无法读取的文件,在include前面加“-”,如 -include a.mk
(四)环境变量MAKEFILES
不要轻易定义环境变量MAKEFILES
(五)make的工作方式
①.读入所有的Makefile
②.读入被include的其他Makefile
③.初始化文件中的变量
④.推导隐晦规则,并分析所有规则
⑤.为所有的目标创建依赖关系链
⑥.根据依赖关系,决定哪些目标要重新生成
⑦.执行生成命令
一般来讲,make会以UNIX的标准Shell,也就是/bin/sh来执行命令
通配符:
“*” : “*.c”表示所有后缀为.c的文件 objects:= ¥(wildcard*.o),objects的值就是.o的集合
“?” : ¥? 是一个自动化变量
“[...]”
“~” :~/test 表示为当前用户¥HOME目录下的test目录
特殊变量:VPATH = src:../headers
1.显式规则 - 明显的目标,依赖文件 ,命令
2.隐晦规则 - 自动推导
3.变量的定义 - 字符串,像C的宏
4.文件指示 - ①Makefile中引用另一个Makefile,像include②根据情况指定有效部分,像#if③定义一个多行命
令
5.注释 - 用“#”进行行注释
(二).Makefile的文件名
1.默认情况下:GNUmakefile makefile Makefile三个文件名最好使用Makefile
2.可以使用别的文件名:Make.Linux Make.Solaris Make.AIX
3.使用特定的Makefile:使用-f和--file参数 make -f Make.Linux make --file Make.AIX
(三)引用其他的Makefile
1.include foo.mk a.mk b.mk c.mk e.mk f.mk ------不能以tab开始
¥(bar) = e.mk f.mk
等价于 include foo.mk *.mk ¥(bar)
①make执行时,无绝对或相对路径,make会在当前目录找,有“-I”或“--include-dir”参数,会在参数指定的目录找
②<prefix>/include(一般是:/usr/local/bin或者/usr/include)存在的话,make也会去找
make找不到先生成 警告信息,完成make的读取后,重试去找没有找到的文件,仍旧没有找到出现致命的信息,如果想让make无视这些无法读取的文件,在include前面加“-”,如 -include a.mk
(四)环境变量MAKEFILES
不要轻易定义环境变量MAKEFILES
(五)make的工作方式
①.读入所有的Makefile
②.读入被include的其他Makefile
③.初始化文件中的变量
④.推导隐晦规则,并分析所有规则
⑤.为所有的目标创建依赖关系链
⑥.根据依赖关系,决定哪些目标要重新生成
⑦.执行生成命令
一般来讲,make会以UNIX的标准Shell,也就是/bin/sh来执行命令
通配符:
“*” : “*.c”表示所有后缀为.c的文件 objects:= ¥(wildcard*.o),objects的值就是.o的集合
“?” : ¥? 是一个自动化变量
“[...]”
“~” :~/test 表示为当前用户¥HOME目录下的test目录
特殊变量:VPATH = src:../headers
关键字: vpath 1.vpath<pattern><directories> 2.vpath<pattern> 3.vpath
来自《跟我一起写Makefile》