• makefile示例


    #定义编译选项
    CXX = g++
    #设置“CXXFLAGS”环境变量
    CXXFLAGS = -g -Wall -O0 -std=c++0x


    #定义头文件目录,链接库目录,链接文件
    INCLUDE_PATH = ../frame/3rdInc/eluna/ ../frame/3rdInc/glog ../frame/3rdInc/google ../frame/3rdInc/json /
    ../frame/3rdInc/uuid
    LIB_PATH = ../frame/3rdLibs32/ ../frame/3rdLibs32/lib
    LIBS = -leluna -lglog -ljson -llua-5.1.so -lprotobuf -luuid -lmysql

    ifneq($(CXX), g++)
    LIBS += -lstdc++
    endif

    #定义项目代码根目录及所有文件夹目录
    #追加变量"+="操作符
    SRC_DIR = ./
    VPATH = $(SRC_DIR)
    VPATH += $(SRC_DIR)/operate
    VPATH += $(SRC_DIR)/data
    VPATH += $(SRC_DIR)/../frame
    VPATH += $(SRC_DIR)/../frame/common

    #找出所有 .cpp 文件 和相应的.o文件(带上路径)
    #'wildcard'函数,它有一个参数,功能是:展开称一列所有符合由其参数描述的文件
    #'patsubst'函数(patten substitude匹配替换),它需要3个参数,第一个是一个需要匹配的式样;
    #第二个是表示用什么来替换它, 第三个是:需要被处理的
    #objs = $(patsubst %.c, %.o, $(SOURCES))
    #foreach 用来做循环的
    #$(foreach <var>, <list>, <text> )
    #把参数<list>中的单词逐一取出放到<var>所指定的变量中;

    #然后再执行<text> 所包含的表达式。每次<text>会返回一个字符串;
    #循环过程中<text>的返回的每个字符串会以空格分割;
    #最后当整个循环结束时,<text>所返回的每个字符串所组成的整个字符串(以空格分隔)将会是foreach函数的返回值。
    SRC_FILES = $(foreach n, $(VPATH), $(wildcard $(n)/*.cpp))
    #使用了变量的高级用法中的替换,将变量$(SRC_DIR)中的.cpp 替换成.o
    #也可以用静态模式中的替换
    #OBJ_FIELS := $(SRC_DIR:%.cpp = %.o)
    #notdir 取文件函数
    OBJ_FILES = $(notdir $(SRC_FILES:.cpp=.o))


    #把所有的.o文件放到定义好的输出文件夹中统一管理
    #make中的另一种用”变量“来定义变量的方法,使用":=" 操作符
    OUTPUT_DIR := debug
    OUTPUT_OBJS = $(addprefix $(OUTPUT_DIR)/, $(subst $(SRC_DIR)/, ,$(OBJ_FILES)))

    #linking
    server : $(OBJ_FILES)
    @echo $(GENVER)
    $(LINK.cc) $(OBJ_FIELS) -o $@ $(LIB_PATH) $(LIBS)

    #生成.d文件的模式
    .%.d : %.cpp
    @set -e; rm -f $@;
    $(CC) -MM $< > $@.$$$$;
    sed 's,($*).o[ :]*,1.o $@ : ,g' < $@.$$$$ > $@;
    rm -f $@.$$$$

    #sinclude 与include 功能一致;区别在于sinclude 可以兼容其他版本的make

    #打包
    .PHONY: tar
    tar:
    tar zcvf ./tank_s3_$(shell date -d today +"%m%d_%H%M").tar.gz ../ListServer

    #清除 伪目标
    .PHONY: clean
    clean:
    -rm -rf *.o *.d.* *.d .*.d

    #打印输出
    @echo 'hello world'

    #makefile函数,以"$"来标识的
    #$(<function> <arguments>) 或 ${<function> <arguments>}
    #function:函数名,arguments:参数,参数之间以“,”分隔,函数名与参数之间空格分开
    #函数调用以“$”开头

     

  • 相关阅读:
    点击空白处隐藏盒子
    java缓存技术
    使用Java处理大文件
    java实现把一个大文件切割成N个固定大小的文件
    笔记:Java的IO性能调整
    NIO之轻松读取大文件
    java读写文件,读超大文件
    java读取大文件 超大文件的几种方法
    java web服务器cpu占用过高的处理
    软件开发各类文档模板
  • 原文地址:https://www.cnblogs.com/chris-cp/p/3873882.html
Copyright © 2020-2023  润新知