MAKEFILE简明指南(七)(转)

MAKEFILE简明指南(七)
2010/06/08 14:55

文件名宏

在commands block中使用,以表示特定的文件名,包括:

1)        $@    用来表示相关联的dependent line中第一个target的全名(包括路径)。

2)        $$@  同上,但只能用在dependent line中。

3)        $*      target的路径加基本名。

4)        $**   相应的dependent line中的所有dependent。

5)        $?     相应的dependent line中的所有time stamp大于target的dependent。

6)       $<     同上,但只能用在IR中。

下面是一个例子:

DIR = c:\objects

$(DIR)\a.obj : a.obj

COPY a.obj $@

       最后一句展开来就相当于:copy a.obj c:\objects\a.obj

       另外,在使用以上这些宏的时候,还可以通过以下的字符来提取文件名中的某一个部分:

       D     路径

       B     基本名

       F     基本名加扩展名

       R     路径加基本名

       例如:如果$@表示c:\objects\a.object,则

       $(@D)      c:\objects

       $(@B)       a

       $(@F)       a.obj

       $(@R)      c:\objects\a

递归宏

       有3个,它们都是用来在makefile中方便地进行NMAKE的递归调用,它们分别是:

1)        MAKE    

表示运行当前makefile的NMAKE程序的名字。例如,如果你在控制台用以下语句运行makefile:

NMAKE her.mak

则MAKE就等于NMAKE。

但如果你将NMAKE.EXE改名为FUCK.EXE,那么你运行makefile的命令就应该改为:

FUCK her.mak

此时,MAKE就等于FUCK。

2)        MAKEDIR

表示你调用NMAKE时所在的目录。

3)        MAKEFLAGS

表示你运行当前makefile时使用的NMAKE参数。

       这几个宏在build程序的不同版本时特别有用,例如:

       all : vers1 vers2

vers1 :

cd \vers1

$(MAKE)

cd ..

vers2 :

cd \vers2

$(MAKE) /F vers2.mak

cd ..

       NMAKE会分别在.\vers1和.\vers2目录下运行vers1.mak和vers2.mak。

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