Linux下C编程基础之:make工程管理器
3.5.3makefile规则
makefile的规则是make进行处理的依据,它包括了目标体、依赖文件及其之间的命令语句。在上面的例子中,都显式地指出了makefile中的规则关系,如“$(CC)$(CFLAGS)-c$-o$@”,但为了简化makefile的编写,make还定义了隐式规则和模式规则,下面就分别对其进行讲解。
1.隐式规则
隐含规则能够告诉make怎样使用传统的规则完成任务,这样,当用户使用它们时就不必详细指定编译的具体细节,而只需把目标文件列出即可。make会自动搜索隐式规则目录来确定如何生成目标文件。如上例就可以写成:
OBJS=kang.oyul.o
CC=gcc
CFLAGS=-Wall-O-g
david:$(OBJS)
$(CC)$^-o$@
为什么可以省略后两句呢?因为make的隐式规则指出:所有“.o”文件都可自动由“.c”文件使用命令“$(CC)$(CPPFLAGS)$(CFLAGS)-cfile.c–ofile.o”来生成。这样“kang.o”和“yul.o”就会分别通过调用“$(CC)$(CFLAGS)-ckang.c-okang.o”和“$(CC)$(CFLAGS)-cyul.c-oyul.o”来生成。
注意 | 在隐式规则只能查找到相同文件名的不同后缀名文件,如“kang.o”文件必须由“kang.c”文件生成。 |
表3.17给出了常见的隐式规则目录。
表3.17 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) |
2.模式规则
模式规则是用来定义相同处理规则的多个文件的。它不同于隐式规则,隐式规则仅仅能够用make默认的变量来进行操作,而模式规则还能引入用户自定义变量,为多个文件建立相同的规则,从而简化makefile的编写。
模式规则的格式类似于普通规则,这个规则中的相关文件前必须用“%”标明。使用模式规则修改后的makefile的编写如下:
OBJS=kang.oyul.o
CC=gcc
CFLAGS=-Wall-O-g
david:$(OBJS)
$(CC)$^-o$@
%.o:%.c
$(CC)$(CFLAGS)-c$-o$@
3.5.4make管理器的使用
使用make管理器非常简单,只需在make命令的后面键入目标名即可建立指定的目标,如果直接运行make,则建立makefile中的第一个目标。
此外make还有丰富的命令行选项,可以完成各种不同的功能。表3.18列出了常用的make命令行选项。
表3.18 make的命令行选项
命令格式 | 含义 |
-Cdir | 读入指定目录下的makefile |
-ffile | 读入当前目录下的file文件作为makefile |
-I | 忽略所有的命令执行错误 |
-Idir | 指定被包含的makefile所在目录 |
-n | 只打印要执行的命令,但不执行这些命令 |
-p | 显示make变量数据库和隐含规则 |
-s | 在执行命令时不显示命令 |
-w | 如果make在执行过程中改变目录,则打印当前目录名 |
linux相关文章:linux教程
评论