Linux

来源:互联网 发布:若四阶矩阵a与b相似 编辑:程序博客网 时间:2024/06/09 23:54
通过shell指令和Makfile命令,创建通用的C/C++ makefile。需在当前文件夹创建bin,obj,lib三个子文件夹。

makefile文件会自动搜索当前文件夹及其子文件夹中的C/C++文件。其中bin文件夹保存生成的可执行文件myapp,obj文件夹保存生成的中间文件*.o,lib保存需要的库文件。

################################ Should create dir bin,obj,lib# Created by # 2016/06/14###############################DIR_INC=.DIR_SRC=.DIR_BIN=./binDIR_OBJ=./objDIR_LIB=./libsources_all := $(shell find . -name "*.c" -o -name "*.cpp" -o -name "*.h")sources_c   := $(filter %.c, $(sources_all))sources_h   := $(filter %.h, $(sources_all))INC_HEADER := $(sort $(dir $(sources_h)))DIR_INC := $(strip $(subst / ./,:./,$(INC_HEADER)))DIR_INC += #add a NULL on trailDIR_INC := $(strip $(subst / , ,$(DIR_INC)))VPATH=$(DIR_INC)VPATH_INC=$(patsubst %,-I%,$(subst :, ,${VPATH}))SRC=$(sources_c)CLRDIR=$(notdir ${SRC})OBJ=$(patsubst %.c,${DIR_OBJ}/%.o,$(CLRDIR))CC =ccache arm-linux-gnueabihf-gccLD =ccache arm-linux-gnueabihf-gccLDFLAGS = -v -lgcc -lstdc++ -lm -lc -lgcc_s LDFLAGS += -L${DIR_LIB} -Wl,-rpath,`pwd`/${DIR_LIB}TARGET=myappBIN_TARGET=${DIR_BIN}/${TARGET}.PHONY : clean rebuild allall: $(BIN_TARGET) %.d:%.c     set -e; rm -f $@; \ $(CC) -MM $(VPATH_INC) $< > $@.$$$$; \     sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \     rm -f $@.$$$$    include $(SOURCES:c=.d)    $(BIN_TARGET):$(OBJ)    $(LD) $(LDFLAGS) -o $@ $^ -lpthread -lm    ${DIR_OBJ}/%.o:${DIR_SRC}/%.c    $(CC) $(VPATH_INC) -c $< -o $@ clean:    rm -rf $(DIR_OBJ)/*.o $(BIN_TARGET)rebuild: clean all

 

0 0
原创粉丝点击