nmake inside: Makefile的结构

     nmake是微软的make工具,用来管理多文件的c++工程。基本的使用方法是
   
       
nmake /F  makefile_name  target_name

    如果没有指定/F选项,nmake就在当前目录下查找名为makefile的文件;如果不指定target的话nmake会使用makefile中的缺省target。

    一个makefile由Discription Block,Commands,Macros,Inference Rules,Dot Directives和Preprecessing Directives组成。

1. 依赖关系和命令行

    依赖关系和命令行是makefile最基本的组成单元。每个依赖关系由target及其dependent组成,其基本格式如下所示:

      
target_1 ... target_m: dependent_1 ... dependent_n

表示target_1 ... target_m依赖于
dependent_1 ... dependent_n。每个target和dependent都是一个文件名。target和dependent不是绝对的概念,都是相对某个依赖关系而言的,一个依赖关系中的target可能在另外一个依赖关系中是dependent,反过来说一个依赖关系中的dependent在另外一个依赖关系中可能是一个target。
   
    如果target表示的文件并不真实存在,这样的target称为虚假target。虚假target也可以作为dependent,但前提是它必须在某个依赖关系中是target。

    依赖关系后会跟有0或多个命令行,其基本格式如下
   
    target_1 ... target_m: dependent_1 ... dependent_n
          command_1
          ...
          command_k

 
注意格式:依赖关系描述中至少有一个target,而dependent可以有0个或者多个。target必须在每行的起始处,前面不能有任何空格或者制表符。target和dependent之间用冒号分开,冒号前后允许有空格或者制表符。命令行和依赖关系描述行之间不能有空行,但是允许有只包含空格和制表符的行(这样的行看起来是空行,实际不是,因为它包含不可见的空格或者制表符)。命令行之间允许有空行,但是每行命令必须空格、制表符的任意组合开头。

    target和dependent满足特定的条件时,命令行才会执行,暂时把这个条件称之为target过期(out-of-date),把命令行的执行称之为target更新。如果某个target 满足以下三个条件中的任何一个
         (a) 不存在
         (b) 存在,但它的时间戳比某个dependent的新
         (c) 是虚假target
这个target就过期了,它的命令行就会执行,即该target被更新。如果该target的某个dependent本身也是一个target,并且这个dependent也过期了,那么该dependent会先于它的target进行更新。由此可见,target更新是个递归的过程,而且dependent会先于它的target进行更新。
      
    如果没有指定/S、.SILENT、!CMDSWITCHES、或者@,命令行在执行的过程中会首先把命令打印出来。

   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值