Makefile简单介绍

[url]http://os.51cto.com/art/200806/75991.htm[/url]
[size=large]

关于命令行:
一个规则可以有多个命令行,每条命令占一行。
每条命令行必须以[Tab]字符开始,以此告诉make此行是一个命令行。
这也是书写Makefile中容易产生,而且比较隐蔽的错误。


关于注释:
注释行的结尾如果存在反斜线(\),那么下一行也被作为注释行。
:twisted: 反斜线之后不能有空格。

---------------------------------------

伪目标all:
all并不是Makefile要求必须的,但大家默认它为Makefile的入口,是所有目标的目标。

但当all不是第一个Target时,也失去作为入口的功能。
Makefile只会找第一个Target,剩下的Target如果没有引用关系是不会调用的。

---------------------------------------

伪目标clean:
不成文的规矩是,clean从来都是放在文件的最后。
因为Makefile中的第一个目标会被作为其默认目标。
Target将会查看当前目录下的文件是否比依赖新,
clean :
[Tab] rm *.o
如果目录下有clean文件的话,此Target将失效,因为make认为它是一个文件。
故可以使用.PHONY关键字

.PHONY clean
clean :
[Tab] rm *.o

声明它只是一个伪目标,而不是文件。


---------------------------------------
伪目标.SUFFIXES:
这个伪目标是定义后缀名列表,也就是我们自己定义类型,使该类型如何编译。

.SUFFIXES: .d


[/size]
Makefile的命令
[table]
|-n |展开编译的命令 |
| -c |不链接,只生成对象 |
| -g |编译时,输出调试信息 |
| -S |生成汇编文件 |
| -C |预处理阶段不删除注释 |
| -E |生成预处理阶段的文件 |
| -I |使include "file"生效,也就是告知自定义的头文件位置|
| -L |记录为连接库的目录 |
[/table]

Makefile中常见预定义变量:
[table]
|命 令 格 式 |含 义|
|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编译器的选项,无默认值|
|LDFLAGS |传给链接程序(ld)的标志,无默认值|
[/table]

Makefile中常见自动变量:
[table]
|命令格式|含 义|
|$* |不包含扩展名的目标文件名称|
|$+ |所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
|
|$< |第一个依赖文件的名称|
|$? |所有时间戳比目标文件晚的依赖文件,并以空格分开|
|$@ |目标文件的完整名称|
|$^ |所有不重复的依赖文件,以空格分开|
|$% |如果目标是归档成员,则该变量表示目标的归档成员名称|
[/table]

---------------------------------------
[size=large]
Makefile的结构:
[list]
[*]目标体(target)
[*] 命令(command)
[*]依赖体(dependency)
[/list]
target : prerequisites ...
[Tab] command
[Tab] command
...[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值