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)