懒人编译框架

2018-02-08 10:21:07来源:http://blog.chinaunix.net/uid-16459552-id-5783305.html作者:ChinaUnix博客人点击

分享

好几年前写的一个makefile for Linux框架,想不到最近在一个项目中用上了,还挺方便,一键即可编译完成。虽然因为各种原因最后没提交到库里,但支持众多特性还是让这个Makefile颇有用处,所以不如开源出来,让有缘者用上。


支持的特性。


1. 无须任何配置,make一键完成编译。


2. 自动搜索所有的c文件和h文件。生成的可执行程序名字就是所在目录的目录名。


3. 支持文件更新的自动依赖。任何改动,包括头文件的修改,都会自动重新编译相关文件。


4. 支持线程库。


5. 支持clean。


后期改进:1. 支持c++编译;2. 归集编译产生的文件到指定目录。



点击(此处
)折叠或打开


# user config
#LIB_LIST=
#DIR_LIST=
#CFLAGS=-g -Wall -Werror
CFLAGS=-g -Wall
CC=gcc
AR=ar -rc
LINK=gcc
LIBFLAGS=-fPIC# autoconfig
CUR_DIR=$(shell pwd)
ROOT_DIR=$(CUR_DIR)ifeq (${DIR_LIST},)
DIR_LIST=$(shell find . -type d | grep -v .git)
endifINC_DIR=${DIR_LIST}
INC_LIST=$(INC_DIR:%=-I${ROOT_DIR}/%)#SRC_LIST=$(foreach dir, ${CUR_DIR}/${DIR_LIST}, $(wildcard ${dir}/*.c))
SRC_LIST=$(shell find . -type f -name '*.c')
OBJ_LIST=$(SRC_LIST:.c=.o)
DEP_LIST=$(SRC_LIST:.c=.d)MOD_NAME=$(shell basename ${CUR_DIR})
BIN_NAME=$(MOD_NAME)#TODO: refer to #include "*.h"
CFLAGS+=-I$(ROOT_DIR) -I${CUR_DIR} ${INC_LIST}# command line argument telling to build shared library objects
ifeq ($(shared), on)
ADD_LIB=$(LIB_LIST:%=-L${ROOT_DIR}/%) $(LIB_LIST:%=-l%)
LIB_NEED=$(foreach i, ${LIB_LIST}, ${ROOT_DIR}/$(i)/lib$(i).so)
ADD_LIB+=-lpthread
else
# sequence is important!
ADD_LIB=$(foreach i, ${LIB_LIST}, ${ROOT_DIR}/$(i)/lib$(i).a)
LIB_NEED=${ADD_LIB}
ADD_LIB+=/usr/lib/libpthread.a /usr/lib/libc.a
endif$(BIN_NAME): ${OBJ_LIST}
${LINK} $^ ${ADD_LIB} -o $@%.o: %.c
${CC} ${CFLAGS} -c $<-o $@%.d: %.c
@set -e; rm -f $@; ${CC} ${CFLAGS} -MM $<> $@.$$$$; sed 's,/($(notdir $*)/)/.o[:]*,$*.o $@:,g' $@.$$$$ > $@; rm -f $@.$$$$
-include ${DEP_LIST}
#${BIN_NAME}: ${LIB_NEED}
$(shell echo "${BIN_NAME} ${CUR_DIR}/${BIN_NAME}.d: ${OBJ_LIST} ${LIB_NEED}" > ${BIN_NAME}.d)
-include ${BIN_NAME}.d
.PHONY: clean
clean:
-rm -f *.so *.a ${BIN_NAME} $(shell find . -type f -name "*.o") $(shell find . -type f -name "*.d")

当然,如果你想把部分代码编译成动态库,方便灵活配置和发布,那么也有一个ebf框架可用。详见 /2014th7cj/d/file/p/20180208/expressBuildFrame ,可到此处下载。


最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台