MAKEFILE简明指南(七)(转)
文件名宏 在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。 |