通用性makefile编写模板

在linux的世界里,makefile是不可逾越的编程规则,摆脱了传统的IDE的束缚,但是面对的却是灵活多变的makefile编译规则,如何能以不变应万变,能有个相对通用一点的模板,此模板也在不断的根据工程的扩展在完善:

编译规则我定义了3个文件,主要包括makefile文件,config.mk,src.mk,其实在linux里后缀名不重要,这里.mk后缀主要做区分用没有其他特殊含义

makefile文件:主要起到编译源码、链接目标文件,最终生成可执行文件

config.mk文件:主要是配置参数

src.mk文件:主要是源码的增加和删减,比如增加了一个目录或者源码文件,在此修改

src.mk文件内容:

#source file location configuration

#./01.src
DIR_01=./01.src
SRC=$(DIR_01)/main.c
SRC+=$(DIR_01)/app.c

#./02.drv
DIR_02=./02.drv
SRC+=$(DIR_02)/flash.c

#./03.net
DIR_03=./03.net
SRC+=$(DIR_03)/net.c

#./04.uart
DIR_04=./04.uart
SRC+=$(DIR_04)/uart.c
SRC+=$(DIR_04)/serial.c #no use

#./05.task
DIR_05=./05.task
SRC+=$(DIR_05)/taskuart1.c
SRC+=$(DIR_05)/taskuart2.c
SRC+=$(DIR_05)/taskuart3.c

#the header file include file path
INC= -I$(DIR_01) -I$(DIR_02) -I$(DIR_03) -I$(DIR_04) -I$(DIR_05)

LIB=

config.mk文件内容:

#this is a compiler file
#configing the compiler
#sunlishuang 2019.12.22

#compile tools configuration
CROSS_COMPILE=arm-none-linux-gnueabi-
AS = $(CROSS_COMPILE)as
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)gcc
SIZE = $(CROSS_COMPILE)size
OBJCOPY = $(CROSS_COMPILE)objcopy
GDB = $(CROSS_COMPILE)gdb
AR = $(CROSS_COMPILE)ar

#compile options
CFLAG=-g 
CFLAG+=-Wall 
#CFLAG+=-v
CFLAG+=-O0
CFLAG+=-pthread -lrt #POSIX thread and shared memory

makefile文件内容:

-include config.mk
-include src.mk

ALL_COMPILE_CFG=$(CFLAG) $(INC) $(LIB)

TARGET=main
OBJS=$(SRC:.c=.o)

$(TARGET):$(OBJS)
    $(CC) $(ALL_COMPILE_CFG) $(OBJS) -o $@

%.o:%.c
    $(CC) $(ALL_COMPILE_CFG) -c $< -o $@

.PHONY: clean
clean:
    -rm -rvf $(TARGET) $(OBJS)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值