IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> makefile-通用简单Demo -> 正文阅读

[开发工具]makefile-通用简单Demo

文章目录

简介

以前在网上找了一圈,希望找个能自动编译源码目录下所有文件的单makefile Demo,但一直没有找到完全合适的;最后自己拼凑出了这个Demo;

github上有一个 makefile 模板工程,需要的可以自行查找;

PS: 主要是想方便自己查找,so代码有点乱,就不处理了

适用范围: 一般的简单小工程 ; 例如 PC上的小工具,MCU工程;

说明

  1. 仅在 windows下 安装 github ,然后使用 git bash 终端窗口 使用测试;

  2. 若缺失make 工具 可以下载 Mingw 工具链,内部有make工具 ;

  3. 核心是 step7 step8 两部分的代码;

  4. 自动将 源码路径作为头文件搜索路径 添加到 编译参数中;

顶层文件组织路径:

  • ~/Src : 存放源码

  • ~/Obj : 存放目标文件

  • ~/ makefile : 顶层makefile

不废话,源码如下:

# 中小工程 makefile 模板

# Step1 指定编译工具链: 根据实际修改 
ToolPath=../../Tool/seh/mingw64/bin
CC := $(ToolPath)/gcc.exe 
AS :=  $(ToolPath)/gcc.exe -x assembler-with-cpp

# 删除命令定义: 不需要修改
CLEANUP =rm -f

#Step2 设置编译参数 : 按实际添加

CFLAGS += -Wall
CCFLAG += -g

# 增加 配置宏定义 例如: HAVE_CONFIG_H
CCFLAG += -DHAVE_CONFIG_H

DBGFLAG := -g
CCOBJFLAG := $(CCFLAG) -c

#Step3 设置主要源目录路径 及 输出路径
# 1-顶层 关键文件夹定义
# 2-输出目标定义
BIN_PATH := .
OBJ_PATH := Obj
SRC_PATH := Src
ASM_PATH := Src
 
TARGET_NAME := Demo
TARGET := $(BIN_PATH)/$(TARGET_NAME)

#Step4 连接脚本参数 
# LDSCRIPT = stm32_flash.ld
# LFLAGS= -T$(LDSCRIPT) -Wl,-Map=$(TARGET).map
LFLAGS :=


#Step5 添加库搜索路径
DLL_PATH := 
# DLL_PATH = -LD:/Toolchain/mingw64/x86_64-w64-mingw32/lib

#Step6 添加对应的库 :按需修改,这部分是因为自身工程需要所包含的
DLL_LIB :=
# DLL_LIB = -lmingw32 
# DLL_LIB += -llibwinmm
DLL_LIB += -lwinmm
DLL_LIB += -lUser32
DLL_LIB += -lKernel32

# 添加对应的 .lib 到 tcc 
# DLL_LIB += -lSDL2main
DLL_LIB += -lSDL2
# -lOpengl32
# -lglu32 \
# -lglut 
			  
#Step7 收集源码, 方式1:手动设置

# 手动配置形式:设置 源文件路径
# R_DIR := $(SRC_PATH)
# SRC_PATH+=$(R_DIR)/XXX
# SRC_PATH+=$(R_DIR)/YYY
# SRC := $(foreach x, $(SRC_PATH), $(wildcard $(addprefix $(x)/*,.c*)))

#Step7 收集源码, 方式2:自动递归遍历
# 自动递归式
rwildcard=$(foreach d,$(wildcard $(addsuffix *,$(1))),$(call rwildcard,$(d)/,$(2))$(filter $(subst *,%,$(2)),$(d)))

SRC := $(call rwildcard,$(SRC_PATH),*.c)


#Step8 一些基本处理和配置 : 固定不需要修改
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 $@
 
#Step9 执行命令定义 : 基本不需要修改 

default: all

# phony rules
.PHONY: all 
all: $(TARGET).exe
	@echo Done

# non-phony targets 
# 1-核心规则
$(TARGET).exe: $(OBJ)
	$(CC) $(CCFLAG) $(INCLUDE_PATH) $(OBJ) $(DLL_PATH) $(DLL_LIB) $(LFLAGS) -o $@ 

#$(CC) $(CCFLAG) $(INCLUDE_PATH) $? $(DLL_PATH) $(DLL_LIB) $(LFLAGS) -o $@ 

#Step10 设置需要额外清除的文件 : 基本不用修改
CLEAN_LIST := 
# CLEAN_LIST += $(TARGET).elf
# CLEAN_LIST += $(TARGET).hex 
# CLEAN_LIST += $(TARGET).bin 
# CLEAN_LIST += $(TARGET).map 
CLEAN_LIST += $(TARGET).exe
CLEAN_LIST += $(OBJ)		


.PHONY: clean
clean:
	@echo CLEAN $(CLEAN_LIST)
	$(CLEANUP) $(CLEAN_LIST)
	
#	$(CLEANUP) ./Src/tags.idx
#	$(CLEANUP) ./Src/tags

参考

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:21:26  更:2021-09-06 11:22:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:39:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码