zoukankan      html  css  js  c++  java
  • Makefile中 的 phony target,empty target

    phony target

    Makefile的语法很简单

    <target> : <prerequisites> 
    [tab]  <commands>

    目标、先决条件、命令 构成了Makefile的全部规则

    一般而言,说到目标总给人一种非要产生么东西出来的感觉,如果带着这种感觉理解phony target(伪目标)可能有些吃力。更好的一种理解是将phony target理解成一个动作,动作的特点是不一定非得产生么东西出来,但是会执行一些操作。Makefile中的phony target就是这样一个特殊target ,使用.PHONY将一个(或一些)target指定为phony target,这样可以确保phony target对应的commands无论如何都会被执行。phony target参考这个

    empty target

    empty target在行为上很像 phony target,可以视为phony target的一种变体。empty target通常用于保存某个动作的一组方法,你可以在任何地方任何时候显式执行这个动作。不像phony target,empty target对应的文件可以实际存在,文件的内容是啥没关系,通常是空的。empty target的目的是当commands的最后一条命令执行完后更新empty target的最后修改时间(last-modification time)。这通常是靠touch来实现的,代码如下

    print: foo.c bar.c
            lpr -p $?
            touch print

    empty target应该有prerequisites ,否则的话emoty target存在也没啥意义。当你执行make XXX的时候,XXX是empty target,如果prerequisites 任何文件新于empty target,则empty target对应的commands就会执行,并在最后更新empty target时间。按照上面代码来讲,也就是说自你上次make empty_target后,prerequisites 中任何文件有变化,再次make empty_target就会把哪些变化的文件打印出来,$?用于表示哪些变化的文件。更多参考Automatic-Variables

    phony target的替代方案

    参考:Rules without Recipes or Prerequisites

    某些版本或者某些平台的make可能不支持.PHONY,这时候可以采取如下替代方案

    clean: FORCE
            rm $(objects)
    FORCE:

     

  • 相关阅读:
    【JS】【8】拼接字符串
    【JS】【7】获取粘贴板的内容
    【Eclipse】【3】checkstyle插件
    【Eclipse】【2】遇到的问题
    android手机短信监听器,监听到的短信发送到web服务器,完整源码分享
    android手机号归属地查下案例源码
    免费web api接口大全
    android读取远程图片案例
    android向web提交参数的4种方式总结,附带网站案例源码
    csu 10月 月赛 B 题 Scoop water
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9465552.html
Copyright © 2011-2022 走看看