window下makefile的使用Word文档格式.docx
- 文档编号:16038633
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:14
- 大小:26.37KB
window下makefile的使用Word文档格式.docx
《window下makefile的使用Word文档格式.docx》由会员分享,可在线阅读,更多相关《window下makefile的使用Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
选项(忽略大小写):
1)
/A强制重新构件所有与NMAKE的target相关的dependents,即使这些dependents并没有过期;
2)
/B即使dependent与target有相同的timestamp,也重建该target。
大部分的OS中的timestamp是以2秒为单位的,如果一个2秒之内被修改,那么它的timestamp将不会有任何变化。
在这种情况下,你就需要使用该选项让NMAKE重建之。
为了预防万一,总是应该使用该选项,尽管可能会导致不必要的重建操作。
3)
/C屏蔽掉大部分的NMAKE输出信息,包括:
非致命错误信息,警告信息,timestamp和版权信息。
如果/C和/K选项同时存在,则/K发出的警告信息也会被干掉。
4)
/D在NMAKE执行期间显示相关的信息。
包括每个文件的timestamp,依赖关系,以及类似于“文件不存在”之类的提示信息。
用于对makefile除错;
5)
/E使环境变量可以覆盖预定义宏;
6)
/Ffilename指定makefile的名字。
如果用“-”代替filename,则NMAKE从STDIN获取makefile的输入(对于键盘终端,用F6或CTRL+Z来结束输入)。
可以指定多个makefile,每个makefile前都要有一个/F。
如果没有/F选项,则NMAKE会在当前目录查找一个名为MAKEFILE(没后缀)的文件作为makefile,如果找不到,则对命令行目标文件使用推导规则。
7)
/HELP显示帮助;
8)
/I忽略makefile中所有指令的返回值;
9)
/K当某条指令出现错误时并不退出而是继续执行其他指令。
在默认的情况下,如果任何一条指令返回非0值,NMAEK就回终止执行。
当打开/K选项后,NMAKE会继续执行其他指令,但不会构建与出错指令相关的文件,而是发出一条警告信息。
如果/K选项打开,同时构建无法完成,则NMAKE返回1;
10)
/M在MS-DOS下,将NMAKE程序交换到磁盘中,以腾出更多的内存。
11)
/N显示但不执行makefile中的命令(预处理命令除外),用于DEBUG;
12)
/NOLOGO禁止NMAKE版权信息;
13)
/P在执行NMAKE之前,将所有NMAKE信息输出到STDOUT,包括所有的宏定义,IR,目标文件描述和.SUFFIXESlist。
如果打开/P选项,而且不指定任何目标文件,则NMAKE仅显示相关信息。
14)
/Q检查target和dependent的timestamp,但不执行commandsblock。
如果目标文件为有效的,则返回0,否则返回255。
只有makefile中的预处理命令会被执行。
当在批处理文件中调用NMAKE时,该选项会十分有用。
15)
/R清除.SUFFIXESlist,忽略所有的IR和TOOLS.INI中定义的或预定义的宏。
16)
/S禁止makefile中所有的被执行指令的显示信息;
17)
/T将命令行中输入文件的timestamp改为当前时间,只执行预处理命令而不执行commandsblock,目标文件的内容不会被改变;
18)
/V当NMAKE被递归调用时,所有定义的宏都会被继承。
在默认的情况下,只有在命令行中定义的宏和环境变量(实际上也是一个宏)是可以被继承的。
19)
/Xfilename将NMAKE的所有错误信息输出到filename指定的文件或设备中。
如果用“-”代替filename,则错误信息会被输出到STDOUT。
在默认情况下,错误信息输出到STDERR。
该选项不会影响由makefile中的指令产生的到STDERR的输出。
20)
/?
显示NMAKE的语法和可用选项;
NMAKE的返回值
NMAKE的返回值及其含义见下表:
值含义
0没有错误
1没有完全执行commandsblock中的指令(只在/K选项打开时有效)
2程序错误,可能的原因包括:
●
makefile的语法错误
commandsblock中的某条指令出现错误
用户中断
4系统错误,例如内存不足
255在/Q选项打开时,如果目标文件已过期,则返回该值
4.makefile的编写
关于NMAKE
MicrosoftProgramMaintenanceUtility,外号NMAKE,顾名思义,是用来管理程序的工具。
其实说白了,就是一个解释程序。
它处理一种叫做makefile的文件(以mak为后缀),解释里面的语句并执行相应的指令。
我们编写makefile文件,按照规定的语法描述文件之间的依赖关系,以及与该依赖关系相关联的一系列操作。
然后在调用NMAKE时,它会检查所有相关的文件,如果目标文件(targetfile,下文简称target,即依赖于其它文件的文件)的timestamp(就是文件最后一次被修改的时间,一个32位数,表示距离1980年以来经过的时间,以2秒为单位)小于依赖文件(dependentfile,下文简称dependent,即被依赖的文件)的timestamp,NMAKE就执行与该依赖关系相关联的操作。
请看下面这个例子:
foo.exe:
first.objsecond.obj
linkfirst.obj,second.obj
第一行定义了依赖关系,称为dependencyline;
第二行给出了与该依赖关系相关联的操作,称为commandline。
因为foo.exe由first.obj和second.obj连接而成,所以说foo.exe依赖于first.ogj和second.obj,即foo.exe为target,first.obj和second.obj为dependent。
如果first.obj和second.obj中的任何一个被修改了(其timestamp更大),则调用link.exe,重新连接生成foo.exe。
这就是NMAKE的执行逻辑。
综上,NMAKE的核心就是这3个家伙——依赖关系,操作和判定逻辑(target.timestamp<
dependent.timestamp,如果为true,就执行相应操作)。
MAKEFILE的语法
现在详细讨论一下makefile的语法。
makefile就像一个玩具型的程序语言,麻雀虽小,但五脏具全。
makefile的组成部分包括:
描述语句(descriptionblock),inferencerules(推导规则),宏和指令(directive)。
描述语句就是dependentlines和commandlines的组合;
inferencerules就是预先定义好的或用户自己定义的依赖关系和关联命令;
宏就不用说了吧;
指令就是内定的一些可以被NMAKE识别的控制命令,提供了很多有用的功能。
另外,makefile中使用以下几个具有特殊意义的符号:
^#\(){}!
@-:
;
$
^(caret):
用于关闭某些字符所具有的特殊意义,使其只表示字面上的意义。
例如:
^#abc表示#abc这个字符串,而#abc则用于在makefile中加入注释,#在这里为注释标志,就像C++中的//。
另外,在一行的末尾加上^,可以使行尾的回车换行符成为字串的一部分。
#(numbersign):
为注释标志,NMAKE会忽略所有从#开始到下一个换行符之间的所有文本。
这里要注意的是:
在commandlines中不能存在注释。
因为对于commandlines,NMAKE是将其整行传递给OS的。
通常对于commandlines的注释都是放在行与行之间。
\(backslash):
用于将两行合并为一行。
将其放在行尾,NMAKE就会将行尾的回车换行符解释为空格(space)。
%(percentsymbol):
表示其后的字符串为一文件名。
用法较复杂,在讲dependentlines的时候再详细讨论。
!
(exclamationsymbol):
命令修饰符,在下面会有详细的讨论。
@(atsign):
:
(colon):
用于dependentlines和inferencerules中,用于分隔target和dependent。
;
(semicolon):
如果对于一个dependentline只有一条命令,则可以将该命令放在dependentline的后面,二者之间用“;
”分隔。
$(dolorsign):
用于调用宏,在下面讲宏的时候再详细讨论。
在makefile中还可以使用DOS通配符(wildcard)来描述文件:
*和?
。
作用相信大家都很熟悉了,在此就不再浪费口水了。
如果要将中间有空格或制表符的字符串作为整体对待,则应该用双引号将之括起来,例如,在指定一个中间有空格的长文件名的时候:
“MyDocument”
或在定义一个宏的时候:
MYMACRO=”copya:
\foo.exec:
\”
描述语句块(DescriptionBlocks)
描述语句块为makefile主体的基本组成单元,其典型结构如下:
target:
dependents
commandsblock
DependentLine
每一个描述语句块中只有一个dependentline,其定义了一个依赖关系。
该行的开头不能有任何空白(空格或制表符)。
冒号两边的target和dependent都可以有多个,之间以空格分隔。
NMAKE在分析makefile时首先会从头到尾扫描每一个dependentline,然后根据依赖关系建立起一棵依赖关系树(dependenttree)。
例如对于依赖关系:
foo.exe:
first.obj:
first.cpp
second.obj:
second.cpp
则在其依赖关系树中,foo.exe为first.obj和second.obj的父亲,而first.obj则是first.cpp的父亲,second.obj是second.cpp的父亲。
如果second.cpp被更新了,则second.obj会被重新构造,从而导致foo.exe被重新构造。
NMAKE就是这样由下而上地对整棵树中的结点进行评估的。
虽然makefile
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- window makefile 使用
![提示](https://static.bdocx.com/images/bang_tan.gif)