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)

makefile函数的更多相关文章

  1. 详解Makefile 函数的语法与使用

    使用函数: 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做变量来使 ...

  2. makefile笔记10 - makefile 函数库文件

    函数库文件也就是对 Object 文件(程序编译的中间文件)的打包文件.在 Unix 下,一般是由命令"ar"来完成打包工作. 一.函数库文件的成员 一个函数库文件由多个文件组成. ...

  3. makefile笔记7 - makefile函数

    在 Makefile 中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能. make 所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做变量来使用. ...

  4. 详解Makefile 函数的语法与使用 (转)

    使用函数: 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做变量来使 ...

  5. 【 MAKEFILE 编程基础之四】详解MAKEFILE 函数的语法与使用!

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/771.html   ...

  6. makefile函数集锦【转】

    转自:http://blog.csdn.net/turkeyzhou/article/details/8612841 Makefile  常用函数表一.字符串处理函数1.$(subst FROM,TO ...

  7. 介绍几个常用的makefile函数

    addprefix. $(addprefix <prefix>, <name1 name2 ...>) 功能:把<prefix>加到name序列中的每一个元素前面. ...

  8. makefile 函数

    1. findstring $(findstring <find>, <in>) 从 in 中查找 find ,如果找到则返回find,否则返回空 str1=1111 str2 ...

  9. GCC,GDB,Makefile和IO复用函数

    2015.1.22 c高级的环境搭建:GCC编译器:全称 GNU CC,是GNU工具(tool chain)的一种,源码编译成机器码,gcc的编译依赖于很多小工具4.3.3和3.4.3版本的比较稳定 ...

随机推荐

  1. HDU 4920 居然会超时

    题意:求两个n*n的矩阵相乘的结果,得出的每个元素%3: 分析:2000ms然后n的范围是800,我们自己估算的时间复杂度并不会超时,但是结果就是超时了. #include <cstdio> ...

  2. Java中获取键盘输入值的三种方法

    Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...

  3. EasyUI 开发笔记(二)

    接上篇 :EasyUI 开发笔记(一)  (http://www.cnblogs.com/yiayi/p/3485258.html) 这期就简单介绍下, easyui 的 list 展示, 在easy ...

  4. 一周学会go语言并应用 by王奇疏

    <一周学会go语言并应用> by王奇疏 ( 欢迎加入go语言群: 218160862 , 群内有实践) 点击加入 零.安装go语言,配置环境及IDE 这部分内容不多,请参考我的这篇安装环境 ...

  5. Apache commons-client authentication(授权)

    import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.UsernamePasswo ...

  6. oracle实现split函数功能

    转载: http://blog.csdn.net/jojo52013145/article/details/6758279在实际的应用中,为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 R ...

  7. 数据结构与算法分析-AVL树

    1.AVL树是带有平衡条件的二叉查找树. 2.AVL树的每个节点高度最多相差1. 3.AVL树实现的难点在于插入或删除操作.由于插入和删除都有可能破坏AVL树高度最多相差1的特性,所以当特性被破坏时需 ...

  8. 在 Java 代码中对 Kerberos 主体进行身份验证

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 本文举例说明如何使用 org.apache.hadoop.security.UserGroupInformation 类在 ...

  9. import pysam 出错解决办法

    安装pysam后,import之,结果,出现报错: Library not loaded: libcurl.4.dylib 尝试很多办法,最终发现应当这样解决: # 首先重装curl brew ins ...

  10. php 删除一段字符串的中的中文

    <?php header('Content-type:text/html;charset=utf-8'); function p($arr){ echo "<pre>&qu ...