• makefile函数


    http://www.cnblogs.com/tianyajuanke/archive/2013/02/16/2610276.html

    通用步骤:

    编译时,可以不知钉头文件,如果指定头文件,其作用是当此头文件变化时,重新生成该规则。如果不知道头文件,则当头文件改动时,只能先clean再make。

    编译时,目标文件如果为dir/%.o,表示递归查找目录dir下的所有.o文件,同样的,依赖文件中如果也相应的为%.cpp,则表示查找匹配文件中的文件名为cpp文件

    -----------------

    编译命令:$(CC) $(CFLAGS) -c $< -o $@  中,$< 表示依赖集,$@ 表示目标集,编译命令一般情况下可以省略。

    makefile思路:

    1,查找项目目录下的所有.cpp文件

    2,将上面找到的变量集后缀.cpp -> .o

    3, 将第二部中的变量集,一一加上debug/和release/前缀,可设为$(OUTPUT_DIR),##就是把所有的.o文件单独放到一个文件中集中管理,避免.o文件凌乱分布,如果变量为OUTPUT_OBJS

    4,链接:

    target:$(OUTPUT_OBJS)

       $(LINK) $(OUTPUT_OBJS) $(CFLAGS) -o target $(LIB_PATH) $(LIBS)

    5,编译:

    $(OUTPUT_DIR)/%.o:%.cpp

      $(CC) $(CFLAGS) $(INCLUDE_PATH) -c $< -o $@

    #定义编译选项
    CC = g++
    LINK = g++
    CFLAGS = -Wall
    
    #定义头文件目录,链接库目录,链接文件
    INCLUDE_PATH = -Iinclude
    LIB_PATH = -Llib -L/usr/local/lib -Lsrc/lib
    LIBS = -lboost_thread -lboost_system -Llib #-ljsoncpp
    
    #定义项目代码根目录及所有文件夹目录
    SRC_DIR = src
    VPATH =  $(SRC_DIR)
    VPATH += $(SRC_DIR)/base
    VPATH += $(SRC_DIR)/data
    VPATH += $(SRC_DIR)/include
    VPATH += $(SRC_DIR)/operate
    VPATH += $(SRC_DIR)/operate/detail
    
    #找出所有 .cpp 文件和相应的 .o 文件(带目录)
    SRC_FILES = $(foreach n, $(VPATH),$(wildcard $(n)/*.cpp))
    OBJ_FILES = $(SRC_FILES:.cpp=.o)
    
    #把所有的 .o 文件放到定义好的输出文件夹中统一管理
    OUTPUT_DIR := debug
    OUTPUT_OBJS = $(addprefix $(OUTPUT_DIR)/,$(subst $(SRC_DIR)/, ,$(OBJ_FILES)))
    
    #创建存放 .o 文件的目录结构
    $(shell mkdir -p "$(OUTPUT_DIR)")
    $(shell mkdir -p "$(OUTPUT_DIR)/base")
    $(shell mkdir -p "$(OUTPUT_DIR)/data")
    $(shell mkdir -p "$(OUTPUT_DIR)/operate")
    $(shell mkdir -p "$(OUTPUT_DIR)/operate/detail")
    
    #更新 ctags
    #$(shell ctags -R --c++-kinds=+p --fields+iaS --extra=+q .)
    
    #定义输出目标名
    TARGET = server
    
    #链接
    $(TARGET) : $(OUTPUT_OBJS)
        $(LINK) $(OUTPUT_OBJS) -o $@ $(LIB_PATH) $(LIBS)
    
    #编译
    $(OUTPUT_DIR)/%.o : %.cpp
        $(CC) -c $< -o $@
    
    #清除
    .PHONY:clean
    clean:
        -rm -rf $(OUTPUT_DIR)/*
        -rm -rf $(TARGET)
  • 相关阅读:
    天才AI少年范浩强坚信“弄斧要到班门”
    向Excel说再见,神级编辑器统一表格与Python
    疯狂脑机接口计划:马斯克的 “读心术”
    Jenkins 学习资料
    VMware: windows8 与 虚拟机ubuntu 14.04 共享文件夹
    [转载]一个老软件测试工程师的日志
    python 解析 配置文件
    借助github搭建自己的博客
    [转载]你需要知道的 16 个 Linux 服务器监控命令
    [转载]Linux服务器性能评估与优化
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5864806.html
Copyright © 2020-2023  润新知