您的位置:首页 > 其它

Makefile中常用规则总结

2016-11-17 22:15 148 查看
Makefile中常用规则总结

一、make常用选项

-d    显示调试信息

-f    指定从哪个文件中读取依赖关系信息。默认文件是“Makefile”或“makefile” ,”-“表示从标准输入

-h    显示所有的Makefile的help信息

-n    打印所有Makefile执行命令,但不执行这些命令

-s    运行时不显示任何信息  

注释 :#

连接符:\

关联列表和命令列表中使用shell通配符:?、*

默认模式规则

%.o:%.c:

  
(CC) (CC)(CFLAGS) -c $<


%.o:%.s:

  (AS) (AS)(ASFLAGS) -o @ @<

简单变量

定义:变量名:=文本

添加:变量名+=文本

变量引用

(变量名) {变量名}

单字符变量内置变量 @  当前目标的名称

?  比当前目标更加新的已修改的依赖性列表 <   比当前目标更新的已修改的当前依赖性名称

用 空格分开的所有依赖性列表虚目标 允许强制执行某些在正常规则中不会发生的事件。比如:可以通过设置一个虚目标生成多个可执行文件,若不使用虚目标,make就只能建立第一个目标。常见虚目标列表all    生成工程中所有可以执行者,通常是Makefile的第一个生成目标 make all #使目标全部被执行

clean    删除make all生成的所有文件

install   在系统目录中安装工程项目生成的可执行文件和文档

uninstall 删除make install 安装的所有文件

二、Make命令与Makefile

Makefile文件内容

显示规则:说明了如何生成一个或多个目标文件(包括要生成的文件/文件的依赖文件/生成的命令)。

隐式规则

变量定义:一般是字符串,Makefile被执行时,其中变量都会拓展到相应的引用位。

文件指示: 1 在一个Makefile文件中引用另一个Makefile文件 (类似include)

2 根据某些情况指定makefile文件中的有效部分 (类似预编译#if)

3 定义一个多行的命令

注释: 注释符#(Makefile文件中需要用到#,可以使用#转义)

注意:

makefile文件的文件名可以是其他名称,但要使用-f或–file指定

make工作执行步骤
1 读入所有makefile文件
2 读入被include包括的其他makefile文件
3 初始化文件中的变量
4 推导隐式规则,并分析所有规则
5 为所有目标文件创建依赖关系链
6 根据依赖关系,决定哪些目标要重新生成
7 执行生成命令

make参数                    例子                        作用
-f --file            make -f makelinux        指定特定的makefile文件
-I --include-dir                            在指定目录下寻找makefile文件
-n --just-print                              只是显示->命令不执行命令
-s --silent                                 禁止命令的输出显示

makefile关键子                    例子                            作用
include                     include ../Make.defines        将别的makefile文件包含进来
include foo.make *.mk (bar)−include不理会无法找到的文件wildcardobjects:= (bar)−include不理会无法找到的文件wildcardobjects:=(wildcard *.o)     让通配符在变量中展开,即让objects的值成为所有.o的文件名的集合
vpath <pattern> <directory>    vpath %.h ../headers        为符合模式<pattern>的文件指定搜素目录

vpath %.c foo:bar
vpath       blish                这两句一起用的话,表示.c结尾的文件先在foo,然后在bar,最后在blish中寻找
vpath <patterh>                                            清除符合模式<pattern>的文件的搜索目录
vpath                                                     清除所有已设置好的文件搜索目录

定义环境变量            例子                        作用
MAKEFILES                                把此变量的值(其他makefile,多个文件用空格分隔)作为一个类似于include的动作
VPATH            VPATH = src:../headers  让make根据路径寻找目标依赖文件,多个路径用:隔开

自动变量
@目标集 @目标集<  所有的依赖目标集

Makefile书写规则(里面的命令其实是shell命令)
通配符(定义一系列比较类似的文件)
*            objects=*.o             所有的.o文件的集合
?
[]
~             ~/test                     表示宿主主目录下test文件

文件搜寻
VPATH
vpath 关键字

伪目标
.PHONY        .PHONY: clean            伪目标可以直接放在make后面像操作文件一样操作
make clean

多目标

静态模式
目标集合            目标集模式             目标集的二次定义
<targets ...>: <target-pattern>: <prereq-pattern>
<commands>
...

makefile文件的函数
filter

自动生成依赖关系
gcc -MM main.c         //查找main.c文件包含的头文件,并生成依赖关系
.d文件的应用
使用命令
显示命令 @ehco (@避免输出命令,只输出命令执行结果)

执行命令
exec:
cd /home/hchen; pwd        第二条命令执行建立在第一条命令结果上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: