MAKEFILE简明指南(三)(转)

MAKEFILE简明指南(三)
2010/06/08 14:52

    Target和dependent也可以不是一个文件,而是一个标号(label)。这时,就称之为pseudotarget(伪文件)。Pseudotarget的名字不能与当前目录下的任何文件名相同。一个pseudotarget如果要作为dependent,那么它必须要作为target出现在某个dependent line中。当使用pseudotarget作为target时,与之关联的commands block一定会被执行,同时NMAKE会赋予它一个假想的time stamp。该time stamp等于它的dependents中最大的time stamp,或者,如果它没有dependent,就等于当前时间。该假想的time stamp在pseudotarget作为dependent时会被用来进行有效性评估。这个特性最大的好处就是,你可以让NMAKE构造多个target,而不用将每个target都在NMAKE的命令行中列出来,例如:

       all : setenv project1.exe project2.exe

project1.exe : project1.obj

LINK project1;

project2.exe : project2.obj

LINK project2;

setenv :

set LIB=\project\lib

上例中有两个pseudotarget,一个是all,另一个是setenv。首先是setenv被评估,其作用是设置环境变量LIB,然后project1.exe和project2.exe依次被更新.

Commands Block

       第二行开始到下一个dependent line之间为commands block,其给出了当dependents中的任何一个的time stamp大于target时,需要执行的指令序列(commadns block也可以为空,此时,NMAKE什么也不干)。command line必须以空白开头(刚好与dependent line相反,NMAKE就是通过该特征来分辨二者的),并且在dependent linecommands block中的第一条语句之间不能有空白行(就是除了一个换行符,什么也没有的行。所以只有一个空格或制表符的行是合法的,此时NMAKE将其解释为一个null command),但在command lines之间可以有空白行。Commands block中的每一条命令可以是在控制台中合法的任何命令。事实上大可将commands block当成一个由控制台命令序列组成的批处理文件。

       此外,对commands block中的命令,还可以在其前面添加一个或多个所谓的命令修饰符(command modifier),以实现对命令的一些额外的控制。命令修饰符有以下3种:

1)        @command

消除该命令的所有到STDOUT的输出。

2)        –[number]command

关掉对该命令返回值的检测。在默认的情况下,如果一条命令返回非0值,则NMAKE将会停止执行。但如果在命令前加上一“-”,则NMAKE将会忽略该命令的返回值。如果“-”紧接着一个整数,则NMAKE会忽略掉任何大于该整数的返回值。

3)        !command

如果该命令的执行对象为$**$?(这两个都是预定义的宏,前者表示相应的dependent line中所有的dependent,后者表示所有比target具有更大的time stampdependent),则该“!”修饰符将会使该命令施行于这两个宏所描述的每一个独立的文件上。

       NMAKE还提供了一些语法可以在commands block中表示相应的dependent line中第一个dependent的文件名组成。例如:

       foo.exe : c:\sample\first.obj c:\sample\second.obj

              link %s

NMAKE将“link %s”解释为:

       link c:\sample\first.obj

如果将命令改为“link %|pfF.exe”,则NMAKE将之解释为:

       link c:\sample\first.exe

%s表示全文件名,%|[part]F表示文件名中的某个部分,part可以是下列字符中的一个或多个,如果part为空,%|F%s的意思相同:

1)        d:盘符;

2)        p:路径;

3)        f:文件基本名;

4)        e:文件扩展名

posted @ 2010-11-23 16:16  董雨  阅读(331)  评论(0编辑  收藏  举报