Makefile的内容
Makefile文件包括描述块(description block)、宏定义(micros)、推导规则(inference rules)、和指令(directives)。本节描述了Makefile的一般写法,剩下的章节详细描述了Makefile中每个元素。
特殊字符
NMAKE的特殊字符包括:
: ; # ( ) $ ^ \ { } ! @ —
若要将 NMAKE 特殊字符用作文字字符,请在它前面添一插入符号 (^)。NMAKE会忽略在特殊字符之前插入的脱字符(^)。引号引起来的字符串内的脱字符 (^) 被视为一个脱字符。
你也可以在一行的末尾使用脱字符(^),它的作用是向一个宏定义中插入一个换行符。这样NMAKE会将换行符也解释为宏定义的一部分,而不是一个宏的结束。注意,这与使用反斜杠(\)来继续宏定义行是不一样的,反斜杠会将换行符替换成为一个空格。更多细节可以参考“宏和 NMAKE”一节。
在命令中,用%表示一个文件说明的开始。NMAKE将“%s”解释为一个文件名,同时它也会在“%|”后跟随字符"d",”e", “f", ”p“ 或是"F"字符串当作是部分或完整的文件或路径名。如果要使用在命令中使用这些字符,请使用双百分号(%%)来替代单一百分号(%)。其它情况下NMAKE将"%"字符当作普通文字字符来处理。不过,NMAKE总是将双百分号%%解释成一个百分号字符,所以如果想要使用%%,你可以使用三个百分号%%%或四个百分号%%%%来表示。
若要将美元符号 ($) 用作命令中的文字字符,请指定两个美元符号 ($$)。此方法可以代替 ^$ 使用。
通配符
你可以使用MS-DOS的通配符(*和?)来指定目标和依赖的名字。NMAKE会展开依赖行上的通配符,但是命令中的通配符不会被展开。
示例
在下面的描述块中,通配符“*”使用了两次。
project.exe : *.asm ml *.asm /Feproject.exe
NMAKE将会在当前目录中查找所有以.asm为后缀名的文件并展开其在依赖行上。如果其中任意的.asm文件过期了,ML命令将会展开*.c同时编译和链接所有的文件。
注释
如果要Mafefile中添加注释,需要在注释之前加入#号。如果整行都是注释,那么#必须出现在该行的开始位置,否则#以后的内容将会当做注释。NMAKE会忽略#号到下个换行符之间的文本内容。
命令行中不能包含注释,即使命令是作为依赖项或是推导规则也不例外。这是因为NMAKE并不解析命令,它而是把整个命令都交给给操作系统。不过,注释可以出现在命令块的行之间。
如果想要注释掉一个命令,那么在该命令行的开始插入#。
您可以在下列情形中使用注释:
# Comment on line by itself OPTIONS = /MAP # Comment on macro definition line all.exe : one.obj two.obj # Comment on dependency line link one.obj two.obj; # Comment in commands block copy *.obj \objects .obj.exe : # Comment in inference rule
想要描述一个文字#字符,在其前面插入^符号,就像下面一样:
DEF = ^#define #Marcro representing a C preprocessing directive
TOOLS.INI文件中也可以使用注释。另外TOOLS.INI允许另一种方式来添加注释,那就是使用;字符。
长文件名
如果文件系统支持的话,你可以在Makefile文件中使用长文件名。但是必须将文件包含在一对双引号中,就像下面的依赖行的写法:
all : "VeryLongFileName.exe"