目录
模式规则(Pattern Rules)
模式规则允许你使用通配符来定义一类文件的编译规则,从而简化 Makefile 的书写。模式规则使用 %
符号表示通配符。
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
在上面的示例中,%.o: %.c
定义了一条规则,指示编译器将所有的 .c
文件编译为相应的 .o
文件。$<
表示依赖文件列表中的第一个文件,$@
表示目标文件。
PHONY 目标(Phony Targets)
PHONY 目标是指那些不对应真实文件的目标,而是代表一些动作或命令。使用 .PHONY
声明可以避免与同名文件冲突,并告诉 Makefile 这是一个伪目标。
.PHONY: clean
clean:
rm -f *.o
在上面的示例中,.PHONY: clean
声明了 clean
是一个 PHONY 目标。这允许你在命令行中使用 make clean
命令来执行清理操作,而不会与同名的文件产生冲突。
多目标规则(Multiple Targets)
你可以为一个规则指定多个目标,表示这些目标共享相同的依赖和命令。
$(TARGET1) $(TARGET2): $(OBJS)
$(CC) $(CFLAGS) $(OBJS) -o $@
使用变量和函数
Makefile 支持使用变量和函数来管理和处理数据。你可以使用变量来存储常用的值和命令,使用函数来进行字符串操作和条件判断。
VERSION = 1.0
TARGET = myapp-$(VERSION)
ifeq ($(DEBUG),1)
CFLAGS += -g
else
CFLAGS += -O2
endif
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) $(OBJS) -o $@
在上面的示例中,VERSION
和 TARGET
是变量,存储了版本号和目标文件名。ifeq
条件判断根据 DEBUG
变量的值选择不同的编译选项。$@
是一个自动化变量,表示当前目标。