Make语法规则:
通常规则的语法格式如下:
TARGETS : PREREQUISITES
              COMMAND...

或者:
TARGETS : PREREQUISITES ; COMMAND
      
COMMAND
       
...

1.函数wildcard
  
用法: $(wildcard PATTERN)
   解释: 在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。
  例子:

ifneq ($(wildcard $(USR_LIB_DIR)/libboost_thread.so),)
LIB_BOOST_THREAD := -lboost_thread

   objects := $(patsubst %.c,%.o,$(wildcard *.c))
   foo : $(objects)
         cc -o foo $(objects) 

2.变量VPATH
   特殊变量“VPATH”。通过变量“VPATH”可以指定依赖文件的搜索路径,当规则的依赖文件在当前目录不存在时,make会在此变量所指定的目录下去寻找这些依赖文件。
      定义变量“VPATH”时,使用空格或者冒号(:)将多个需要搜索的目录分开。
      VPATH = src:../headers

依赖指定了两个搜索目录,“src”和“../headers”。对于规则“foo:foo.c”如果“foo.c”存在于“src”目录下,此规则等价于“foo:src:/foo.c”。
注意:此VPATH变量只对依赖有效,对于命令command无效.

3.变量vpath
     vpath”关键字(全小写的)。它不是一个变量,而是一个make的关键字,它所实现的功能和上一小节提到的“VPATH”变量很类似,但是它更为灵活。它可以为不同类型的文件(由文件名区分)指定不同的搜索目录。
      其用法有三种:
           (1)、vpath PATTERN DIRECTORIES      为所有符合模式“PATTERN”的文件指定搜索目录“DIRECTORIES”
         (2) vpath PATTERN    清除之前为符合模式“PATTERN”的文件设置的搜索路径。
         (3) vpath  清除所有

eg. vpath %.h ../headers

    其含义是:Makefile中出现的.h文件;如果不能在当前目录下找到,则到目录“../headers”下寻找。

一个使用vpath的例子:

vpath %.h inc
vpath %.cpp src
vpath %.c src


CC = g++
USR_LIB_DIR = /usr/lib
USR_LOCAL_LIB_DIR = /usr/local/lib
INCLUDES = inc
APPS = QoeGW
LIB_XMLRPC_CLIENT = $(shell xmlrpc-c-config client --ldadd)
LIBS = -lboost_program_options -lboost_thread-mt -lpcap -llog4cxx $(LIB_XMLRPC_CLIENT)

OBJS = G1070.o logInFile.o pcapIPv6.o parseRTP.o rtpQueue.o xmlrpc_client.o QoeGW.o

all:$(APPS)

$(APPS):$(OBJS)
    $(CC) $(OBJS) -o $(APPS) $(LIBS) -I $(INCLUDES)

%.o:%.cpp
    $(CC) -c -I $(INCLUDES) $<

.PHONY:clean
clean:
    rm *.o $(APPS)

待更新....

转载于:https://www.cnblogs.com/shipfi/archive/2008/05/28/1209332.html

GNU Make笔记相关推荐

  1. 联想K41安装Debian Gnu/Linux笔记

    2019独角兽企业重金招聘Python工程师标准>>> Then, in the grub.cfg file, add the following lines to enable G ...

  2. GCC笔记 命令行分析

    1984年,Richard Stallman发起了自由软件运动,GNU (Gnu's Not Unix)项目应运而生,3年后,最初版的GCC横空出世,成为第一款可移植.可优化.支持ANSI C的开源C ...

  3. DIY自己的GNU交叉工具链(i386-arm) 【ZT】

    嵌入式设备由于不具备一定的处理器能力和存储空间,程序开发一般用PC来完成,然后将可执行文件下载到嵌入式系统中运行.这是目前嵌入式程序开发的不二选择--Host/target模式.但这引发了一个问题:由 ...

  4. linux 可执行文件的分析(gcc GUN BUILEIN)

    1.GCC The History of GCC 1984年,Richard Stallman发起了自由软件运动,GNU (Gnu's Not Unix)项目应运而生,3年后,最初版的GCC横空出世, ...

  5. linux 链接脚本,Linux下的lds链接脚本简介(一)

    每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制. 链接脚本主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分在程序地址空 ...

  6. Linux下的lds链接脚本详解

    一. 概论 每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制. 链接脚本主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分 ...

  7. 编译链接脚本lds文件

    转载自:http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml 一. 概论 每一个链接过程都由链接脚本(linker ...

  8. linux下lds链接脚本详解

    转载自:http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml 一. 概论 每一个链接过程都由链接脚本(linker ...

  9. LD 文件:规则详解

    LD 文件:规则详解 概论 基本概念 脚本格式 简单例子 简单脚本命令 对符号的赋值 SECTIONS命令 MEMORY命令 PHDRS命令 VERSION命令 脚本内的表达式 暗含的连接脚本 1. ...

  10. ld 脚本浅析-LD手册粗糙翻译

    本文乃转载, 我在其基础上做了少量修改. 原作者的E-mail是zhanglei@sict.ac.cn. 完成于2005.11.5-2005.11.8 0. Contents 1. 概论 2. 基本概 ...

最新文章

  1. linux蓝牙设备无法打开,linux 下 无线 wifi 蓝牙 无法启用
  2. (C++)归并排序的递归与非递归实现
  3. 3行Python代码就能获取海量数据?
  4. hbase scan超时设置_如何在优化生产环境的hbase
  5. python语句块标记_Python简单语句
  6. Unity C# Job System介绍(四) 并行化Job和故障排除(完结)
  7. 通过Main的Checkpoint Restore加快Java启动速度
  8. linux vim下删除一行和多行
  9. 从IT的角度思考BIM(二):模式与框架
  10. 没信号也不怕?iPhone 14或将支持卫星网络连接呼救
  11. 解决安装Win 7后XP无法启动问题
  12. TWINCAT2安装问题
  13. 怎么开发qq群自动回复机器人呢?我教你
  14. PSI(隐私集合求交集)的几类基础思想
  15. python 基于numpy的线性代数运算
  16. 通过SetWindowsHookEx实现跨进程子类化
  17. java微信公众号开发一:服务器信息配置
  18. Docker架构与工作流程
  19. 利用临时文件恢复PowerPoint(PPT)文件
  20. golang学习笔记(十六):多态的实现

热门文章

  1. linux系统下 java 环境的安装
  2. led灯条维修_康佳液晶电视LED42F2200N灯条问题导致不开机故障修复
  3. 6.7开启Consul使用
  4. SpringMVC实现list表单(六)
  5. 【渝粤教育】国家开放大学2018年秋季 0365-21T电子商务概论 参考试题
  6. fatal error C1010
  7. Spring 基于注解的AOP实现
  8. 机器学习中对不均衡数据的处理方法
  9. SpringBoot23 分模块开发
  10. 【转】雅虎邮箱免费开通POP方法 YAHOO!MAIL YMAIL免费开通POP.SMTP和转发功能