说明:本模板主要使用 gcc 编译 c 源码。
1、目标
1、指定目标名;
2、指定相关编译参数;
3、自动搜索源文件(目前未实现);
4、过程文件存放在 build/temp 目录中,可执行文件存放在 build/bin 目录中;
2、makefile 模板
# 版本信息:2022.04.02 - lqonlylove-v1.0.0
##############################
# 目标
##############################
TARGET := main
##############################
# 环境参数
##############################
# CURDIR - make 自动指定(不用修改)
# SHELL - make 自动指定(不用修改)
##############################
# 编译参数
##############################
CC := gcc
#LD :=
LDLIBS :=
LDFLAGS :=
DEFINES :=
#INCLUDE := -I.
CFLAGS = -g -Wall -O3 $(DEFINES) $(INCLUDE)
CXXFLAGS = $(CFLAGS) -DHAVE_CONFIG_H
#LOADLIBES :=
#OUTPUT_OPTION :=
#OBJCOPY :=
#OBJDUMP :=
##############################
# 目录管理
##############################
# 设置编译目录
BUILD_PATH := build
# 编译过程文件存放目录
OBJ_PATH := $(BUILD_PATH)/temp
# 编译可执行文件存放目录
BIN_PATH := $(BUILD_PATH)/bin
# 头文件目录(根据需要调整)
INC_PATH := user \
bsp/inc
# 源文件目录(根据需要调整)
SRC_PATH := user \
bsp/src
# 获取源文件下的 c 文件列表(带目录信息)
SRC := $(foreach dir,$(SRC_PATH),$(wildcard $(dir)/*.c))
SRC_WITHOUT_DIR := $(notdir $(SRC))
# 为头文件目录添加 -I 选项(详细内容见 gcc 使用手册)
INCLUDE = $(addprefix -I ,$(INC_PATH))
# 生成 .c 文件对应的 .o 文件列表
OBJ := $(patsubst %.c,%.o,$(SRC_WITHOUT_DIR))
# 为 .o 加上编译目录
OBJ_WITH_BUILD_DIR := $(addprefix $(OBJ_PATH)/,$(OBJ))
# 指定 makefile 源文件查找路径(非常重要)
VPATH := $(SRC_PATH)
##############################
# makefile 目标管理
##############################
all: build_path $(TARGET)
# 指定目标文件生成规则
$(TARGET):$(OBJ_WITH_BUILD_DIR)
$(CC) -o $(BIN_PATH)/$@ $^
# 指定过程文件生成规则(详细内容见 makefile 静态模式)
$(OBJ_WITH_BUILD_DIR):$(OBJ_PATH)/%.o: %.c
$(CC) -c $(CFLAGS) -o $@ $<
build_path:
@if [ ! -d $(BUILD_PATH) ]; then \
mkdir -p $(OBJ_PATH);mkdir -p $(BIN_PATH);\
fi
# 清除过程文件
.PHONY: clean print
# 打印部分信息(测试使用)
print:
@echo $(BIN_PATH)
clean:
-rm -rf $(BIN_PATH)/$(TARGET) $(OBJ_WITH_BUILD_DIR)