Makefile中的目标

一般目标

  • 目标就是我们需要的最终文件,也是make的最终输出  
  • Makefile的运行机制是:先将目标当成文件,查看文件是否存在,如果存在且是最新,那么直接结束,如果文件不存在,那么根据依赖和命令生成目标。

伪目标

  • 伪目标也是目标
  • 伪目标是一种特殊的目标,有其特殊性
  • 伪目标的特殊性:伪目标不会当成文件来判断,只是一个标签
  • 伪目标同样可以有依赖,这样make伪目标时就是先make依赖,然后运行规则
  • 作用:伪目标每次都会更新
  • 格式:.PHONY : xxx
  • 例子:
.PHONY : clean
#只要有这个声明,不管是否有“clean”文件,要运行“clean”这个目标,只有“make clean”

  

多目标

  • Makefile 的规则中的目标可以不止一个,其支持多目标,有可能我们的多个目标同时依赖 于一个文件,并且其生成的命令大体类似
bigoutput littleoutput : text.g
generate text.g -$(subst output,,$@) > $@
#等价于
bigoutput : text.g
generate text.g -big > bigoutput
littleoutput : text.g
generate text.g -little > littleoutput

  

相同目标

  • 多条规则目标相同,称为相同目标
  • Makefile的处理规则:如果多条规则中只有一条规则有命令,那么直接合并成一条规则,目标不变,依赖叠加;如果有多条规则有命令,那么后面的规则会覆盖前面的规则,且会爆告警
  • Makefile中的自动头文件依赖就是利用目标相同时,规则合并的技术实现
target1: dep1
target1: dep2
cmd2 #合并后 target1: dep1 dep2
cmd2
target1: dep1
cmd1
target1: dep2
cmd2 #合并后 target1: dep2
cmd2

  

Makefile中的目标的更多相关文章

  1. makefile中伪目标的理解

    1. 我们知道Makefile中的语法是这样: target ... : prerequisites ... command - - 2. 假如编译两个文件可以这么写: a.o:a.c  gcc -c ...

  2. Makefile 中的.PHONY

    PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字.有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能. 所谓的PHONY这个单词就是伪造的意思,makefile中将.PH ...

  3. 第三篇 makefile的伪目标

    我们来思考一下makefile中的目标究竟是什么?实际上,在默认情况下:    1.make将makefile的目标认为是一个文件:    2.make解释器比较目标文件和依赖文件的新旧关系,决定是否 ...

  4. [转] Makefile 基础 (7) —— Makefile 中 make 的运行

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...

  5. .PHONY makefile中的伪目标

    我的理解: 拿clean举例,如果make完成后,自己另外定义一个名叫clean的文件,再执行make clean时,将不会执行rm命令. 为了避免出现这个问题,需要.PHONY: clean === ...

  6. Makefile中的特殊宏定义以及实用选项

    Makefile中的一些特殊宏定义的名字跟shell中的位置变量挺相似的. $?    当前目标所依赖的文件列表中比当前目标文件还要新的文件 $@   当前目标我名字 $<   当前依赖文件的名 ...

  7. makefile中的自动化变量$@,$%,$

    转自:http://www.2cto.com/os/201302/191344.html   makefile中的自动化变量$@,$%,$   自动化变量  模式规则中,规则的目标和依赖文件名代表了一 ...

  8. makefile 中 $@ $^ %< 使用【转】

    转自:http://blog.csdn.net/kesaihao862/article/details/7332528 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 ...

  9. makefile中的shell语法

    在Makefile中写shell代码有点诡异,和不同的shell语法不太一样,如果不了解,看Makefile会莫名其妙.下面总结了一些. 1:尽在Makefile文件的目标项冒号后的另起一行的代码才是 ...

随机推荐

  1. C/C++语言的学习方向

    这个世界上有太多的坑,如果我们不具备查阅资料的能力和对现实世界的思考能力,入坑是大概率的事情. C/C++语言能做什么?C/C++程序员在做什么?企业需要什么样的C/C++程序员?对初学者来说,要搞清 ...

  2. vue学习第一天:v-bind的使用(让属性绑定变量)

    v-bind的使用 v-bind: 是vue中,提供用于绑定属性的指令  例: <input type="button" value="按钮" title ...

  3. SpringCloud Alibaba (三):Sentinel 流量控制组件

    SpringCloud Alibaba (三):Sentinel 流量控制组件 Sentinel 是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 是面向分布式服务架构 ...

  4. mybatis面试入门

    第一步创建一个java project 导入mybatis需要的jar包,创建与数据库一一对应的javabean对象 第二步:创建mybatis的配置文件 sqlMapconfig.xml 第三步:创 ...

  5. 代码静态测试(java)

    工欲善其事,必先利其器 环境 jdk1.8 IntelliJ IDEA 1.静态代码检查 1.1工具 阿里代码规范检测工具 安装教程:阿里代码规范检查工具 1.2规范等级 在 Snoar 中对代码规则 ...

  6. 【树形dp】 bzoj1131 Sta

    题目 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output 输出你所找到的点 ...

  7. 微信开发_Exception_02_"errcode":40164,"errmsg":"invalid ip 61.172.68.219, not in whitelist hint

    ip查询网址: http://www.ip.cn/ 一.异常现象 今天开始做微信开发,在办公室时能正常获取access_token,晚上回家之后获取access_token时却报出下列错误信息: {& ...

  8. 日期类&&包装类&&System类&&Math类&&Arrays数组类&&大数据类

    day 07 日期类 Date 构造函数 Date():返还当前日期. Date(long date):返还指定日期 date:时间戳--->距离1970年1月1日 零时的毫秒数 常用方法 日期 ...

  9. python数据结构与算法(一)

    1.序列中的N个元素赋值给变量 data = [1,2,3,"string!",["python","php"]] num_1,num_2, ...

  10. 读取模式下cbc latch的事件模拟(热块竞争和热链竞争)-P62

    文章目录 1. 背景 2. 过程 2.1 热块竞争 2.1.1 版本11.2.0.1.0 2.1.1.1 session 1(sid:34) 2.1.1.2 session 2(sid:35) 2.1 ...