zoukankan      html  css  js  c++  java
  • Linux

    通过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=./bin
    DIR_OBJ=./obj
    DIR_LIB=./lib
    
    sources_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 trail
    DIR_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-gcc
    
    LD =ccache arm-linux-gnueabihf-gcc
    
    LDFLAGS = -v -lgcc -lstdc++ -lm -lc -lgcc_s 
    
    LDFLAGS += -L${DIR_LIB} -Wl,-rpath,`pwd`/${DIR_LIB}
    
    TARGET=myapp
    
    BIN_TARGET=${DIR_BIN}/${TARGET}
    
    
    .PHONY : clean rebuild all
    
    all: $(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
  • 相关阅读:
    浅谈独立使用NDK编译库文件(Android)
    Ubuntu 13.04 安装使用clang
    一道TOPK问题
    exp-00091 oracle错误的解决办法
    win32多线程程序设计笔记(第四章下)
    数据库索引的实现原理 (转)
    [置顶] linux常用命令手册
    ZigBee研究之旅(二)
    java中length,length(),size()区别
    浅谈href=#与href=javascript:void(0)的区别
  • 原文地址:https://www.cnblogs.com/Pan-Z/p/6370183.html
Copyright © 2011-2022 走看看