Makefile编写规则
时间: 2023-07-10 17:34:51 浏览: 56
Makefile是一个用于自动化编译和构建程序的工具,其中包含了一些规则,用于指定依赖关系和生成目标文件的方式。
Makefile的基本格式如下所示:
```
target: dependencies
[tab] command
```
其中,target是要生成的目标文件名,dependencies是生成目标文件所依赖的文件,command是生成目标文件的命令。
Makefile中还包含一些预定义变量和内置函数,可以帮助我们更方便地编写规则,例如:
- CC:指定C编译器
- CFLAGS:指定编译选项
- LDFLAGS:指定链接选项
- $(wildcard pattern):查找符合模式pattern的文件
- $(patsubst pattern,replacement,text):将文本text中符合模式pattern的部分替换为replacement
除此之外,还可以使用条件语句和循环语句等,使Makefile更加灵活和强大。
相关问题
Linux下 Makefile编写规则
Makefile是用于自动化编译和构建程序的工具。以下是在Linux下编写Makefile的基本规则:
1. 每个目标都应该包含依赖关系和命令。
2. 目标通常是文件名,但也可以是任何其他名称。
3. 依赖关系是指目标所依赖的文件或其他目标。
4. 命令是指要执行的操作或指令。
5. 使用tab键来缩进命令,而不是空格。
6. 可以使用变量来存储常用的值,例如编译器名称和选项等。
7. 可以使用通配符来匹配多个文件,例如*.c表示所有以.c结尾的文件。
8. 可以使用伪目标来表示不需要生成文件的操作,例如clean和install等。
9. make命令将寻找名为Makefile或makefile的文件,并执行其中的规则。
10. 可以使用注释来解释规则,以#开头。
例如,以下是一个简单的Makefile规则:
```
CC = gcc
CFLAGS = -Wall -g
hello: hello.o
$(CC) $(CFLAGS) -o hello hello.o
hello.o: hello.c
$(CC) $(CFLAGS) -c hello.c
clean:
rm -f hello hello.o
```
这个Makefile包含3个规则。第一个规则表示要生成名为hello的目标,它依赖于hello.o文件。它的命令是使用gcc编译器和选项来链接hello.o文件,生成可执行文件hello。
第二个规则表示要生成名为hello.o的目标,它依赖于hello.c文件。它的命令是使用gcc编译器和选项来编译hello.c文件,生成目标文件hello.o。
第三个规则表示要生成名为clean的伪目标,它没有依赖关系,其命令是删除所有生成的文件hello和hello.o。
使用make命令可以执行Makefile中的规则。例如,可以使用以下命令来编译并运行hello程序:
```
make
./hello
```
可以使用以下命令来清除所有生成的文件:
```
make clean
```
Linux下Makefile编写规则
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):命令中使用变量。
- $<:自动变量,表示当前规则的第一个依赖文件。
- $@:自动变量,表示当前规则的目标文件。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)