Linux下Makefile编写规则
时间: 2024-04-30 19:22:48 浏览: 19
1. 语法规则:Makefile文件是由一系列规则组成,每个规则由三部分组成:目标、依赖和命令。其基本语法规则如下:
```
target1 target2 … : prerequisite1 prerequisite2 …
command1
command2
…
```
- target:目标文件,可以是一个或多个文件名,中间用空格分隔。
- prerequisite:依赖文件,是生成目标文件所需的文件,也可以是一个或多个文件名,中间用空格分隔。
- command:命令,是生成目标文件的具体操作,由一行或多行命令组成,每行命令前必须有一个tab键。
2. 变量规则:Makefile文件中可以定义变量,用于存储文件路径、编译选项等信息。
```
CC=gcc
CFLAGS=-Wall -O2
SRC=main.c utils.c
OBJS=$(SRC:.c=.o)
test: $(OBJS)
$(CC) $(CFLAGS) -o test $(OBJS)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
```
- CC:编译器变量,指定编译器为gcc。
- CFLAGS:编译选项变量,指定编译选项为-Wall -O2。
- SRC:源文件变量,指定源文件为main.c和utils.c。
- OBJS:目标文件变量,将SRC中的.c文件转换成.o文件。
- $(CC) $(CFLAGS):命令中使用变量。
- $<:自动变量,表示当前规则的第一个依赖文件。
- $@:自动变量,表示当前规则的目标文件。
3. 伪目标规则:Makefile文件中可以定义伪目标,用于执行一些特殊操作,如清除中间文件、打包等。
```
.PHONY: clean
clean:
rm -f *.o test
```
- .PHONY:伪目标声明,表示clean是一个伪目标。
- clean:伪目标,执行清除中间文件和可执行文件操作。
4. 隐式规则:Makefile文件中可以定义隐式规则,用于根据文件后缀自动推导出生成目标文件的命令。
```
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
```
- %.o:隐式规则,表示.o文件。
- %.c:隐式规则,表示.c文件。
- $(CC) $(CFLAGS):命令中使用变量。
- $<:自动变量,表示当前规则的第一个依赖文件。
- $@:自动变量,表示当前规则的目标文件。