简介
以前在网上找了一圈,希望找个能自动编译源码目录下所有文件的单makefile Demo,但一直没有找到完全合适的;最后自己拼凑出了这个Demo;
github上有一个 makefile 模板工程,需要的可以自行查找;
PS: 主要是想方便自己查找,so代码有点乱,就不处理了
适用范围: 一般的简单小工程 ; 例如 PC上的小工具,MCU工程;
说明
-
仅在 windows下 安装 github ,然后使用 git bash 终端窗口 使用测试; -
若缺失make 工具 可以下载 Mingw 工具链,内部有make工具 ; -
核心是 step7 step8 两部分的代码; -
自动将 源码路径作为头文件搜索路径 添加到 编译参数中;
顶层文件组织路径:
-
~/Src : 存放源码 -
~/Obj : 存放目标文件 -
~/ makefile : 顶层makefile
不废话,源码如下:
ToolPath=../../Tool/seh/mingw64/bin
CC := $(ToolPath)/gcc.exe
AS := $(ToolPath)/gcc.exe -x assembler-with-cpp
CLEANUP =rm -f
CFLAGS += -Wall
CCFLAG += -g
CCFLAG += -DHAVE_CONFIG_H
DBGFLAG := -g
CCOBJFLAG := $(CCFLAG) -c
BIN_PATH := .
OBJ_PATH := Obj
SRC_PATH := Src
ASM_PATH := Src
TARGET_NAME := Demo
TARGET := $(BIN_PATH)/$(TARGET_NAME)
LFLAGS :=
DLL_PATH :=
DLL_LIB :=
DLL_LIB += -lwinmm
DLL_LIB += -lUser32
DLL_LIB += -lKernel32
DLL_LIB += -lSDL2
rwildcard=$(foreach d,$(wildcard $(addsuffix *,$(1))),$(call rwildcard,$(d)/,$(2))$(filter $(subst *,%,$(2)),$(d)))
SRC := $(call rwildcard,$(SRC_PATH),*.c)
ASM_SRC := $(wildcard $(ASM_PATH)/*.s)
SRC += $(ASM_SRC)
OBJ := $(addprefix $(OBJ_PATH)/, $(addsuffix .o, $(notdir $(basename $(SRC)))))
DIR_PATH := $(SRC_PATH)/
DIR_PATH += $(sort $(dir $(basename $(SRC))))
INCLUDE_PATH += $(addprefix -I ,$(DIR_PATH))
vpath %.c $(DIR_PATH)
vpath %.s $(DIR_PATH)
$(OBJ_PATH)/%.o: %.c
$(CC) $(CCOBJFLAG) $(INCLUDE_PATH) -o $@ $<
$(OBJ_PATH)/%.o: %.s
$(AS) -c $(CCOBJFLAG) $< -o $@
default: all
.PHONY: all
all: $(TARGET).exe
@echo Done
$(TARGET).exe: $(OBJ)
$(CC) $(CCFLAG) $(INCLUDE_PATH) $(OBJ) $(DLL_PATH) $(DLL_LIB) $(LFLAGS) -o $@
CLEAN_LIST :=
CLEAN_LIST += $(TARGET).exe
CLEAN_LIST += $(OBJ)
.PHONY: clean
clean:
@echo CLEAN $(CLEAN_LIST)
$(CLEANUP) $(CLEAN_LIST)
参考
|