makefile入门
一个规则
目标:依赖条件
(Tab)命令
两个函数
-
wildcard:
src=$(wildcard ./*.c) #匹配当前目录所有.c文件,将文件名组成列表赋值给变量src
-
patsubst
obj=$(patsubst) #将参数3中包含参数1的部分,替换成参数2
三个自动变量
- $@:表示规则中的目标
- $<:表示规则中的第一个依赖条件,在模式规则中,可将依赖列表中的依赖一次取出,套用模式规则
- $^:表示规则中的所有依赖条件,组成一个列表,以空格隔开,如果列表中有重复项则消除重复项
模式规则
%.o:%.c
gcc -c \$< -o \$@
静态规则
obj=$(patsubst)
$(obj):%.o:%.c
gcc -c \$< -o \$@
伪目标
.PHONY: clean all
例子
CC := g++
C_FLAGS := -std=c++17 -Wall -Wextra
BIN := bin
SRC := src
INCLUDE := include
LIB := lib
LIBRARIES :=
EXECUTABLE := main
all: $(BIN)/$(EXECUTABLE)
clean:
$(RM) $(BIN)/$(EXECUTABLE)
run: all
./$(BIN)/$(EXECUTABLE)
$(BIN)/$(EXECUTABLE): $(SRC)/*
$(CC) $(C_FLAGS) -I$(INCLUDE) -L$(LIB) $^ -o $@ $(LIBRARIES)