跟我一起写 Makefile (PDF 重制版)
628.51 KB
81 页
0 评论
语言 | 格式 | 评分 |
---|---|---|
中文(简体) | .pdf | 3 |
摘要 | ||
文档详细介绍了Makefile的书写规则和使用方法,包括规则的结构、变量的定义与使用、命令的书写以及条件判断的应用。规则由目标、依赖和命令组成,目标定义了生成的文件,依赖说明了目标的依赖文件,命令描述了如何生成目标。变量在Makefile中类似于宏,可在目标、依赖、命令中使用,并支持自动化变量如$@和$<。命令可以通过define关键字定义命令包,以提高复用性。条件判断用于根据不同的情况选择执行的规则。文档还提到了自动依赖构建的方法,即通过sed命令生成依赖文件并将其包含在主Makefile中。make命令的执行包括指定Makefile文件、处理条件表达式以及函数的使用。 | ||
AI总结 | ||
《跟我一起写 Makefile》(PDF 重制版)发行版本 1.0,主要内容如下:
---
### **1. 概述**
- **Makefile 作用**:Makefile 是一份 BUILD脚本,告诉 make 命令如何编译和链接程序。
- **Makefile 规则**:
- **目标(target)**:可以是 object 文件、可执行文件或标签。
- **依赖关系(prerequisites)**:生成目标所需的文件或其他目标。
- **命令(recipe)**:生成目标所需执行的 shell 命令。
---
### **2. 书写规则**
- **规则结构**:`targets : prerequisites`,后跟命令(以 Tab 开头)。
- **规则举例**:
```makefile
foo.o: foo.c defs.h
cc -c -g foo.c
```
- **目标**:foo.o。
- **依赖**:foo.c 和 defs.h。
- **命令**:编译 foo.c 生成 foo.o。
- **规则顺序**:Makefile 中的第一条规则中的目标会被视为最终目标。
---
### **3. 变量**
- **变量定义**:类似 C/C++ 宏,可以在目标、依赖、命令等处使用。
- **变量命名**:允许字符、数字、下划线,不允许特殊字符,大小写敏感。
- **变量使用**:`$(变量名)` 或 `${变量名}`,变量值会在使用时展开。
- **示例**:
```makefile
objects = program.o foo.o utils.o
program : $(objects)
cc -o program $(objects)
$(objects) : defs.h
```
---
### **4. 自动化变量**
- **常用自动化变量**:
- `$@`:目标文件名。
- `$<`:第一个依赖文件名。
- `$^`:所有依赖文件名(以空格分隔)。
- `$?`:所有比目标文件新的依赖文件名(以空格分隔)。
---
### **5. 自动生成依赖**
- **方法**:通过编译器生成依赖文件(如 .d 文件)。
- **示例**:
```makefile
%.d: %.c
@echo "Generating dependency file $@"
@gcc -M $(CPPFLAGS) $< > $@
```
- **引入依赖文件**:使用 `include` 命令。
```makefile
sources = foo.c bar.c
include $(sources:.c=.d)
```
---
### **6. 条件判断**
- **语法**:
```makefile
if condition
endif
```
- **示例**:
```makefile
ifeq ($(CC),gcc)
CFLAGS += -Wall
endif
```
---
### **7. 函数**
- **内置函数**:
- `subst`:字符串替换。
- `patsubst`:模式字符串替换。
- `abspath`:获取绝对路径。
- `wildcard`:匹配文件。
- **示例**:
```makefile
sources := $(wildcard *.c)
objects := $(patsubst %.c,%.o,$(sources))
```
---
### **8. 定义命令包**
- **语法**:
```makefile
defineCMD
命令1
命令2
endef
```
- **示例**:
```makefile
define run-yacc
yacc $(firstword $^)
mv y.tab.c $@
endef
foo.c : foo.y
$(run-yacc)
```
---
### **9. Make 命令**
- **退出码**:
- 0:成功。
- 1:执行错误。
- 2:无需更新目标。
- **指定 Makefile**:
```bash
make -f hchen.mk
```
- **参数**:
- `-C dir`:指定目录。
- `-s`:静默模式。
- `-n`:仅显示命令,不执行。
---
### **总结**
本书系统介绍了 Makefile 的书写规则、变量定义、自动化变量、条件判断、函数、命令定义以及 make 命令的使用方法,通过示例和详细解释帮助读者掌握 Makefile 编写技巧。 |
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余
74 页请下载阅读 -
文档评分