【嵌入式】分享一个嵌入式中Makefile的通用Demo

1.前言

之前因为稍微学了点Makefile的基本语法,所以就想着自己写个Makefile,一来以后自己作参考,二来也是可以复习下之前的一些命令,三来就是分享啦~

2.基本功能

键入make:

*自动生成elf、lst、hex、bin、o文件;

*判断当前目录下是否有输出文件output、二进制文件obj的文件夹,若无,则新建,有则不执行;

*将输出文件和目标文件自动移动值对应文件夹;

键入make DEBUG

*调试命令,自定义以打印出中间文件名;

键入make LIBA

*生成静态库;

键入make LIBSO

*生成动态库;

键入make clean

*删除中间文件、目标文件、可执行文件、库文件等;

3.源码分享

COMPILE:=
GCC:=$(COMPILE)gcc
AR:=$(COMPILE)ar
OBJDUMP:=$(COMPILE)objdump
OBJCOPY:=$(COMPILE)objcopy
OUT_NAME:=main
TARGET:=$(OUT_NAME).elf
LST:=$(OUT_NAME).lst
BIN:=$(OUT_NAME).bin
HEX:=$(OUT_NAME).hex
DIR_LIB:=./src
SRC_LIB:=$(shell find $(DIR_LIB) -name "*.c")
OBJ_LIB:=$(patsubst %.c,%.o,$(SRC_LIB))
NAME_LIBA:=libmy_src.a
NAME_LIBSO:=libmy_src.so
#头文件的目录
INC:=-I./include
#找出当前目录及子目录中所有的.c文件
SRC:=$(shell find -name "*.c")
#将.c文件全部替换成同名的.o文件
OBJ:=$(patsubst %.c,%.o,$(SRC))
all:$(OBJ)
 $(GCC) -o $(TARGET) $^ #生成可执行文件
 $(OBJDUMP) -S -l $(TARGET) > $(LST) #生成lst文件
 $(OBJCOPY) -O ihex $(TARGET) $(HEX) #生成hex文件
 $(OBJCOPY) -O binary -S $(TARGET) $(BIN) #生成bin文件
 #hex->bin: $(OBJCOPY) -I ihex -O binary $(HEX) $(BIN) 
 if [ ! -d obj ];then \
  mkdir obj; \
 fi
 mv $(OBJ) obj
 if [ ! -d output ];then \
  mkdir output; \
 fi
 mv $(TARGET) $(LST) $(BIN) $(HEX) output
%.o:%.c
 $(GCC) -g -c -o $@ $^ $(INC)
.PHONY:DEBUG LIBA LIBSO clean
DEBUG:
 @echo $(SRC)
 @echo $(OBJ)
LIBA:$(OBJ_LIB)
 $(AR) rcs $(NAME_LIBA) $^
LIBSO:$(OBJ_LIB)
 $(GCC) -shared -fPIC -o $(NAME_LIBSO) $^
clean:
#-regex表示引用正则表达式
 find -regex ".*\.bin\|.*\.hex\|.*\.elf\|.*\.i\|.*\.o\|.*\.a\|.*\.so\|.*\.lst" | xargs rm -fr

4.效果演示

键入make之前的文件结构如下:bdb0963426b8681f467a18bfc14f0329.png键入make之后再看文件结构:e1df9ac5decfc7d0fdeef7d38164b379.png

原文链接:

https://blog.csdn.net/weixin_46582567/article/details/127173753?spm=1001.2014.3001.5501

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值