Makefile文件写法模板
针对文件结构为:
项目根目录/
├── Makefile # 构建脚本
├── bin/ # 存放最终生成的可执行文件(main)
├── src/ # 存放所有 .c 源文件
├── inc/ # 存放所有 .h 头文件
├── obj/ # (Makefile 自动生成)存放编译的 .o 目标文件
└── dep/ # (Makefile 自动生成)存放 .d 依赖文件(头文件依赖关系)
可以使用以下的Makefile文件模板来自动编译:
# 编译器设置
CC := gcc
CFLAGS := -I./inc -Wall -Wextra -g
LDFLAGS := # 目录设置
SRC_DIR := src
INC_DIR := inc
BIN_DIR := bin
OBJ_DIR := obj
DEP_DIR := dep# 获取所有源文件
SRCS := $(wildcard $(SRC_DIR)/*.c)
OBJS := $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRCS))
DEPS := $(patsubst $(SRC_DIR)/%.c,$(DEP_DIR)/%.d,$(SRCS))# 最终目标
TARGET := $(BIN_DIR)/main# 默认目标
all: $(TARGET)# 链接目标文件生成可执行文件
$(TARGET): $(OBJS)@mkdir -p $(BIN_DIR)$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@# 编译源文件生成目标文件,并生成依赖文件
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c@mkdir -p $(OBJ_DIR)@mkdir -p $(DEP_DIR)$(CC) $(CFLAGS) -MMD -MP -MF $(DEP_DIR)/$*.d -c $< -o $@# 包含自动生成的依赖文件
-include $(DEPS)# 清理所有生成的文件(.o, .d, 可执行文件)
clean:rm -rf $(OBJ_DIR) $(DEP_DIR) $(BIN_DIR).PHONY: all clean