一个超好用经典Makefile小例模板(吐血整理)

利用Makefile生成一个组件库

#指定shell为bash
SHELL=/bin/bash

# 想要生成的组件库名称
TARGET_LIB_A := libXXX.a

# 最终存放库文件和头文件的目录
DIST_INC := ./dist/include/component
DIST_LIB := ./dist/lib
DIST := ./dist/{include/component/,lib/}

# 需要打包的头文件
SRC_INC :=	./src/aaa.h		\
			./src/bbb.h	    \
			./src/ccc.h	

# 交叉编译链
CROSS_COMPILE=arm-himix200-linux-
CC=$(CROSS_COMPILE)gcc
CXX=$(CROSS_COMPILE)g++
AR=$(CROSS_COMPILE)ar

# C/C++编译选项
CFLAGS := -Wall -Werror
CXXFLAGS :=

# 需要编译的源代码目录
SRC_DIR:=	./src       \
            ./src/utils 
# 需要编译的源代码文件格式	
SFIX:=  .c .cpp

# 得到源代码目录下的所有源代码文件
SOURCES := $(foreach x,${SRC_DIR},\
			$(wildcard \
			$(addprefix  ${x}/*,${SFIX})))

# 编译时指定的头文件路径
INCLUDES := -I./src -I./include -I./include/ebase

# 去掉扩展名,再追加.o的扩展名,得到依赖文件名集合 (带路径)
OBJS_FILE := $(addsuffix .o ,$(basename ${SOURCES}))

# 1、先清理不必要的文件
# 2、生成库文件
all : clean $(TARGET_LIB_A)
    @mkdir -p $(DIST)                    #创建存放成果物的目录
	mv $(TARGET_LIB_A) $(DIST_LIB)      #拷贝生成的库文件
	cp $(SRC_INC) $(DIST_INC)           #拷贝头文件

	
$(TARGET_LIB_A) : $(OBJS_FILE)
	@echo -e "AR	$@"
	@$(AR)  -rcs $@ $^ 
	@rm -f $(OBJS_FILE)


%.o : %.c
	@$(CC) $(INCLUDES) -c $< -o $@ $(CFLAGS)
	@echo -e "CC	$<"
%.o : %.cpp
	@$(CXX) $(INCLUDES) -c $< -o $@	$(CXXFLAGS)
	@echo -e "CXX	$<"

.PHONY: clean
clean:
	@rm -f  $(OBJS_FILE)
	@rm -rf ./dist

利用Makefile生成一个可执行文件

#指定shell为bash
SHELL=/bin/bash

# 想要生成的可执行文件名称
DEMO:= demo

# 交叉编译链
CROSS_COMPILE=
CC=$(CROSS_COMPILE)gcc
CXX=$(CROSS_COMPILE)g++

# C/C++编译选项
CXXFLAGS := -Wall -Werror -Wl,-rpath=../lib/ebase

# 需要编译的源代码目录
SRC_DIR:= ./src

# 需要编译的源代码文件格式
SFIX:=  .c .cpp

# 得到源代码目录下的所有源代码文件
SOURCES := $(foreach x,${SRC_DIR},\
			$(wildcard \
			$(addprefix  ${x}/*,${SFIX})))

# 指定编译时的头文件路径
INCLUDES := -I../dist/include -I./src 

# 指定需要链接库的路径
LIB := -L../lib/ebase  -L../dist/lib

#指定需要链接的库
LINK := -lcXXX      \
		-lprotoc -lm -lrt -ldl

#去掉扩展名,再追加.o的扩展名,得到依赖文件名集合 (带路径)
OBJS_FILE := $(addsuffix .o ,$(basename ${SOURCES}))

# 1、先清理不必要的文件
# 2、生成库文件
# 3、生成可执行文件
all : clean mklib $(DEMO)
	
$(DEMO) : $(OBJS_FILE)
	$(CXX)  $(INCLUDES)  -o $@ $^ $(LIB) $(LINK) $(CXXFLAGS)
	@rm -f $(OBJS_FILE)
	
%.o : %.c
	@$(CC) $(INCLUDES) -c $< -o $@
	@echo -e "CC	$<"
%.o : %.cpp
	@$(CXX) $(INCLUDES) -c $< -o $@	
	@echo -e "CXX	$<"

	
.PHONY: mklib
mklib:
	make CROSS_COMPILE= -C ../
	
.PHONY: clean
clean:
	@rm -f $(OBJS_FILE)
	@rm -f ${DEMO}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值