makefile 学习笔记 十二:生成可执行文件的 makefile 模板

说明:本模板主要使用 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)

你可能感兴趣的:(makfile,makefile)