成都市建设厅官方网站免费外链生成器
1. Makefile 基础
核心作用
- 自动化编译:根据文件依赖关系,仅重新编译修改过的文件,提升效率。
- 管理复杂任务:定义任务(如编译、测试、清理),通过一条命令执行。
2. 基本语法
规则结构
target: prerequisitesrecipe
- target:生成的目标(如可执行文件、任务名)。
- prerequisites:依赖的文件或目标。
- recipe:执行的命令(必须用 Tab 缩进)。
示例:编译 C 程序
# 定义编译器和编译选项
CC = gcc
CFLAGS = -Wall -g# 定义目标
app: main.o utils.o$(CC) $(CFLAGS) -o app main.o utils.o# 生成 .o 文件的规则
main.o: main.c utils.h$(CC) $(CFLAGS) -c main.cutils.o: utils.c utils.h$(CC) $(CFLAGS) -c utils.c# 清理生成的文件
clean:rm -f app *.o
3. 核心功能
变量
- 自定义变量:
CC = gcc CFLAGS = -Wall
- 自动变量(常用):
$@
:当前目标名(如app
)。$<
:第一个依赖文件(如main.c
)。$^
:所有依赖文件(如main.c utils.c
)。
隐式规则
- Make 自动推导如何从
.c
生成.o
,简化写法:app: main.o utils.o$(CC) $(CFLAGS) -o $@ $^
伪目标
- 定义不生成文件的任务(如
clean
):.PHONY: clean clean:rm -f app *.o
4. 高级技巧
条件判断
DEBUG = 1
ifeq ($(DEBUG), 1)CFLAGS += -DDEBUG
endif
函数调用
-
wildcard:获取文件列表
SRC = $(wildcard *.c) OBJ = $(SRC:.c=.o)
-
patsubst:模式替换
OBJ = $(patsubst %.c,%.o,$(SRC))
多目录管理
SRC_DIR = src
BUILD_DIR = build# 将 src/*.c 编译到 build/*.o
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c$(CC) $(CFLAGS) -c $< -o $@
5. 常用命令
- 编译:
make
(默认执行第一个目标) - 指定目标:
make clean
- 并行编译:
make -j4
(使用 4 个线程) - 显示命令但不执行:
make -n
6. 完整示例
# 定义变量
CC = gcc
CFLAGS = -Wall -O2
TARGET = myapp
SRC = $(wildcard *.c)
OBJ = $(SRC:.c=.o)# 默认目标
$(TARGET): $(OBJ)$(CC) $(CFLAGS) -o $@ $^# 生成 .o 文件
%.o: %.c$(CC) $(CFLAGS) -c $< -o $@# 清理
.PHONY: clean
clean:rm -f $(TARGET) *.o
7. 学习资源
- 官方手册:GNU Make Manual (链接)
- 书籍推荐:《Managing Projects with GNU Make》