关于Makefile学习的相关知识
一、Makefile内容
一个完整的Makefile中包含了五种内容,显示规则、隐含规则、变量定义、指示符和注释。默认情况下make会在工作目录下
A:显示规则:在任何情况下如何更新一个或者多个被称为目标的文件
隐含规则:根据make根据一类目标文件(典型的是根据文件名的后缀)而自动推导出来的规则,Make根据目标文件的名,自动产生目标的B:以来文件并使用默认的命令来对目标进行更新(建立一个规则)
C:变量定义:使用一个字符或者字符串代表一段文本串,当定义了一个变量后,Makefile后续在需要使用此文本串的地方,通过引用这个变量来实现对文本串的使用
D:指示符:指示符指明在make程序读取makefile文件过程中所要执行的一个动作
E:注释:Makefile中“#”字符后的内容被作为是注释内容
二、Makefile文件包含
Makefile中包含其他文件使用的关键字是include
例如:include FILENAMES…
三、变量
变量的名称可以由大小写字母、阿拉伯数字和下划线构成
变量在声明时需要给予初值,在使用时,需要在变量名前加上$符号,但最好用小括号()或者大括号{}将变量给包括起来
变量的名称=值列表
OBJ=main.o test.o
test:$(OBJ)
gcc -o test $(OBJ)
四、变量种类
1、环境变量及作用
普通变量是局部变量,只能在当前文件中使用,环境变量可以在工程中所有Makefile之间使用,是全局变量
CC = arm-linux-gcc
LD = arm-linux-ld
export CC LD
2、自动化变量
$@ 代表目标文件的完整名称
$^ 代表所有不重复的以来文件,以空格分开
$< 代表第一个依赖文件的名称
$* 不包含扩展名的目标文件名称
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,重复的依赖文件
$? 所有时间戳比目标文件晚的依赖文件
$% 如果目标是归档成员,则该变量表示目标的归档成员名称
%.o:%.s
arm-linux-gcc -o $@ $< -c
%.o:%.c
arm-linux-gcc -o $@ $< -c
上面的%.o是目标,%.s和%.c是依赖, @ 代表目标 @代表目标%.o, @代表目标<代表%.s和%.c;参数-o指点文件名字;-c是只编译不链接;