Makefile模板
vscode插件:单一目标
最近在学习Makefile写法,但是总觉得自己写的太烂了,找到了vscode一个插件C/C++ Project Generator
产生的Makefile,感觉很清晰。
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)
以上代码均来自vscode插件C/C++ Project Generator
编译多个目标
下面的makefile可以编译的情景是:每个目标都有且只有一个依赖文件,且依赖文件为.h文件(函数实现也在.h中)。但是这不是一种好的项目组织方式。
CC := g++
C_FLAGS := -std=c++17 -Wall -Wextra
BIN := bin
SRC := src
INCLUDE := include
LIB := lib
LIBRARIES :=
CPP_SRC = $(wildcard $(SRC)/*.cpp)
EXECUTABLE = $(patsubst %.cpp, %, $(CPP_SRC))
all: $(EXECUTABLE)
clean:
$(RM) $(BIN)/$(EXECUTABLE)
run: all
./$(BIN)/$(EXECUTABLE)
$(EXECUTABLE): $(SRC)/%.cpp
$(CC) $(C_FLAGS) -I$(INCLUDE) -L$(LIB) $< -o $@ $(LIBRARIES)
mv $@ $(BIN)