Makefile模板(取自vscode)

文章目录

  • Makefile模板
    • vscode插件:单一目标
    • 编译多个目标

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)

你可能感兴趣的:(makefile)