目录
makefile概述
makefile创建变量的目的
自定义变量
makefile变量的赋值
自动变量
makefile隐含变量
makefile概述
makefile重要性
会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
“自动化编译”:一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率 提升编译效率:再次编译,只编译修改的文件
target... : prerequisites ...
command
target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)
makefile创建变量的目的
用来代替一个文本字符串:
1.系列文件的名字
2. 传递给编译器的参数
3. 需要运行的程序
4. 需要查找源代码的目录
5. 你需要输出信息的目录
6. 你想做的其它事情。
自定义变量
x = a 变量在声明时需要给予初值
$(x)或${x} 取值
如果你要使用真实的 $ 字符,那么你需要用 $$ 来表示。
makefile变量的赋值
符号 | 作用 |
= | 是最基本的赋值方式,与在文中位置无关,系统自动推导将最终的赋值作为该变量的值。 |
?= | 作用是当某变量前面已经定义赋值过,则不执行本次定义赋值,否则执行本次赋值 |
:= | 是覆盖式赋值,假如某变量在前面已经定义赋值过,则将本次赋值作为最新的变量值 |
+= | 追加赋值,旧值保持不变,将新值黏贴到旧值后面 |
自动变量
$* 不包含扩展名的目标文件名称
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$< 第一个依赖文件的名称
$? 所有时间戳比目标文件晚的的依赖文件,并以空格分开
$@ 目标文件的完整名称
$^ 所有不重复的目标依赖文件,以空格分开
$% 如果目标是归档成员,则该变量表示目标的归档成员名称
makefile隐含变量
AR 库文件维护程序的名称,默认值为ar。
AS 汇编程序的名称,默认值为as。
CC C编译器的名称,默认值为cc。
CPP C预编译器的名称,默认值为$(CC) –E。
CXX C++ 编译器的名称,默认值为g++。
FC FORTRAN编译器的名称,默认值为f77
RM 文件删除程序的名称,默认值为rm -f