Makefile文件的书写 - webdancer's Blog
Makefile文件的书写
学习分析源代码,和自己在Linux底下Makefile文件的书写很重要。但是,这是一个逐渐积累的过程,先学一下基本的吧!
Makefile的语法较为复杂,可以参考GNU的官网。http://www.gnu.org/software/make/manual/make.html
1.make命令不仅使用在编译类型的程序文件,还是用于有几个输入文件产生输出文件的情况;比如是文档处理。
2.Makefile语法:
一个Makefile文件包含:依赖关系和规则. 一条依赖关系包含目标文件和它所依赖的源文件.规则:描述了如何由源文件产生目标文件。
目标文件: 源文件1 源文件2 [...]
<tab> 规则 #(注:此处必须是tab键打头)。
(1.)依赖关系:
目标文件产生所依赖的源文件,两者用:与空格分开;格式为:
目标文件: 源文件1 源文件2 […]
例如:
all: main.o 1.o 2.o
main.o: main.c a.h
1.o: 1.c a.h
2.o: 2.c b.h
注意: 在gcc 编译器中有 -MM选项,它可以产生依赖关系。所以,把它产生的输出到某个文件就可以了。
(2)规则:
产生目标文件的语法,可以使用gcc 命令。格式为:
<tab> rules
3.#为注释。从行首到行末。
4.Makefile文件里的宏。
MACRONAME=VALUE
使用时${MACRONAME} 或者 $(MACRONAME)
宏经常用在编译器的选项上。
在make执行shell命令时,每一条命令会打开一个shell,所以加\來连接。
自定义变量:
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 编译器的选项,无默认值
自动变量:
$* : 不包含扩展名的目标文件名称。
$+ : 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
$< : 第一个依赖文件的名称 。
$? : 所有时间戳比目标文件晚的依赖文件,并以空格分开
$@: 目标文件的完整名称
$^ : 所有不重复的依赖文件,以空格分开
$% : 如果目标是归档成员,则该变量表示目标的归档成员名称
5。内建规则:
模式规则是用来定义相同处理规则的多个文件的。它不同于隐式规则,隐式规则仅仅能够用 make 默认的变量来进行操作,而模式规则还能引入用户自定义变量,为多个文件建立相同的规则,从而简化 Makefile 的编写。
模式规则的格式类似于普通规则,这个规则中的相关文件前必须用“%”标明。使用模 式规则修改后的 Makefile 的编写如下:
OBJS = kang.o yul.o
CC = Gcc
CFLAGS = -Wall -O -g
sunq : $(OBJS)
$(CC) $^ -o $@
%.o : %.c
$(CC) $(CFLAGS) -c $< -o $@
6.make 管理函数库:
函数库是一种目标文件的集合,后缀.a。make语法使得管理变得很简单,语法为:lib(file.o),可以把文件加入到函数库中。
7.make使用:
-C dir 读入指定目录下的 Makefile
-f file 读入当前目录下的 file 文件作为 Makefile
-i 忽略所有的命令执行错误
-I dir 指定被包含的 Makefile 所在目录
-n 只打印要执行的命令,但不执行这些命令
-p 显示 make 变量数据库和隐含规则
-s 在执行命令时不显示命令
-w 如果 make 在执行过程中改变目录,则打印当前目录名。
2022年8月23日 18:03
MBOSE HSSLC Guess Paper 2023 Download, The Meghalaya Board of School Education MBOSE is a state agency of the Government of Meghalaya State. MBOSE HSSLC Model Paper 2023 It is responsible for conducting the Secondary School Leaving Certificate SSLC as well as the Higher Secondary School Leaving Certificate HSSLC Examinations in the state.