- makefile文件的语法结构
目标1:依赖文件列表
<\tab>命令1
<\tab>命令2
…
<\tab>命令n
目标2:依赖文件列表
<\tab>命令1
<\tab>命令2
…
<\tab>命令n
* 请务必注意,在命令前面必须有tab键 ,也就是说 目标 与 命令 不是对齐的!*
- make工具
在命令行中的输入语法: make [选项] [目标]
选项 | 功能描述 |
---|---|
-C dir | 在读取规则文件之前,进入指定的目录dir |
-f file | 指定file文件作为存放规则的文件 |
-h | 显示所有的make选项 |
-i | 忽略所有的命令的执行错误 |
-I dir | 当包含其他规则文件时,指定搜索目录 |
-n | 只打印要执行的命令,不执行命令 |
-p | 显示make变量数据库和隐含规则 |
-s | 在执行命令时不显示命令 |
-w | 在处理规则文件之前和之后,显示工作目录 |
例子1:
appexam:main.o app.o mod.o lib.o
<\tab>gcc -o appexam main.o app.o mod.o lib.o
main.o:mian.c app.h
<\tab>gcc -c main.c
app.o:app.c app.h
<\tab>gcc -c app.c
mod.o:mod.c
<\tab>gcc -c mod.c
lib.o:lib.c lib.h
<\tab>gcc -c lib.c
clean:
<\tab>rm -f *.o
* 注意clean以及clean后面的是一个为目标,这并不是为了生成一个clean的文件,而是执行命令,删除 .o格式 的文件 *
- makefile中的变量
make工具支持4种变量类型:自定义变量,环境变量,预定义变量,自动变量。
自定义变量
- 语法:变量名=字符串
- 功能:将“字符串”赋值给“变量名”,在makefile中变量没有数据类型
- 引用:$(变量名)
- 例子2:对例子1的代码增加一行,并且修改前两行,起到的功能是一样的
OBJS=main.o app.o mod.o lib.o appexam:$(OBJS) <tab\>gcc -o appexam $(OBJS)
- 环境变量
- 在make运行过程中,将环境变量转化为同名同值的make变量。
预定义变量
- GNU make预定义了一些变量,在makefile文件中可以直接使用,也可以对这些变量进行重新定义。
预定义变量名 含义 默认值 AR 归档程序 ar AS 汇编器 as CC C语言编译器 cc CXX C++编译器 g++ CPP 带有标准输出的C语言预处理程序 $(CC) -E RM 删除文件的命令 rm -r 例子3:对例子2的代码修改第三行,起到的功能是一样的
OBJS=main.o app.o mod.o lib.o appexam:$(OBJS) <tab\>$(CC) -o appexam $(OBJS)
自动变量
- 自动变量由make工具预先定义,具有特定的含义,它的值与规则中的目标和依赖的对象有关。
变量 功能描述 $^ 所有的依赖文件,以空格分开,以出现的先后为序 $< 第一个依赖文件的名称 $? 所有的依赖文件,以空格分开,它们的修改日期,比目标的创建日期晚 $* 不包含扩展名的目标文件名称 $@ 目标的完整名称 例子4:对例子3的代码修改第三行,起到的功能是一样的
OBJS=main.o app.o mod.o lib.o appexam:$(OBJS) <tab\>$(CC) -o $@ $^