您的位置:首页 > 其它

VC中使用nmake命令编译方法

2015-08-17 16:09 399 查看
VC6.0其实已经不再使用makefile文件进行编译了,但是它仍然可以导出makefile文件,后缀名为*.mak,方法是在工程菜单下的导出makefile文件,你也可以将*.mak文件更名为makefile这样就可以只使用nmake进行编译而不用再在后面带参数([/f makefile] )。

剩下的工作就是进入该工程文件所在的路径,然后执行makefile命令,然后再将生成文件copy到bin目录下就ok了。

1.如果要编译Release版本

nmake /f "*****.mak" CFG="****** - Win32 (x86) Release"

2.如果要编译Debug版本

nmake /f "*****.mak" CFG="****** - Win32 (x86) Debug" 或 nmake /f "*****.mak"

因为makefile文件里有如下逻辑:

!IF "$(CFG)" == ""

CFG=****** - Win32 Debug

!MESSAGE No configuration specified. Defaulting to ****** - Win32 Debug.

!ENDIF

要注意头(库)文件路径要在工程----设定中加入,不然会无法编译通过。

nmake参数:

Usage: NMAKE @commandfile

NMAKE [options] [/f makefile] [/x stderrfile] [macrodefs] [targets]

Options:

/A Build all evaluated targets

/B Build if time stamps are equal

/C Suppress output messages

/D Display build information

/E Override env-var macros

/HELP Display brief usage message

/I Ignore exit codes from commands

/K Build unrelated targets on error

/N Display commands but do not execute

/NOLOGO Suppress copyright message

/P Display NMAKE information

/Q Check time stamps but do not build

/R Ignore predefined rules/macros

/S Suppress executed-commands display

/T Change time stamps but do not build

/U Dump inline files

/Y Disable batch-mode

/? Display brief usage message

关于NMAKE的宏定义信息,请参阅550页。

命令行选项

NMAKE接收选择项以控制NMAKE会话。选择项并不区分大小写且其前面可以是斜线(/)或是破折号(-)。

您可以指定一些选择项在makefile文件中或是TOOLS.INI文件中。

/A

强制NMAKE去生成所有检测到的目标文件,甚至目标文件相比于其依赖文件并没有过期。此选项并不强制NMAKE产生无关的目标文件。

/B

告诉NMAKE去执行依赖性检查即使时间戳是一样的。大多数操作系统在2秒种内分配一个时间戳。如果您的命令执行地很快,NMAKE也许可能认为一个文件是最新的但其实不是。

此选项可能会导致一些不必要的生成步骤,但建议在速度非常快系统上运行NMAKE时加上该选项。

/C

禁止默认NMAKE输出,包括非致命NMAKE错误或警告讯息,时间戳,以及NMAKE版权信息。如果同时指定/C和/K选项,那么/C将会禁止来自/K选项的警告输出。

/D

打印信息NMAKE执行期间的信息。这些信息散布于NMAKE的默认输出中打印到屏幕。NMAKE打印在生成过程检测到的每个目标文件和依赖文件的时间戳,并报告一个信息当一个目标文件不存在时。

目标文件的依赖文件的打印信息在目标文件之前且是交错的。/D和/P选项在调试一个makefile时将会非常有用。

设置或清除部分makefile文件的/D选项,可以使用!CMDSWITCHES指令,具体请参阅572页“预处理指令”章节。

/E

引用环境变量来覆盖makefile文件中的宏定义。请参阅“宏定义”一节于550页。

/F filename

指定makefile文件的文件名。文件名前可以加空格或制表符。如果你指定破折号(-)于文件名前,NMAKE将从标准输入设备获得makefile的输入。

(按下F6或是CTRL+Z来结束键盘输入。)NMAKE可以接受多个makefile文件,每个makefile文件之间用/F隔开。

如果你忽略了/F选项,NMAKE搜索当前目录中文件名为MAKEFILE(没有后缀)的文件并将其当做makefile输入。

如果MAKEFILE文件并不存在,NMAKE使用默认推导规则来生成命令行中的目标。

/HELF

调用快速帮助功能。如果NMAKE不能定位帮助文档可是快速帮助,那么它显示一份NMAKE命令行语句的简要总结。

/I

忽略列在makefile文件中的所有命令的退出代码。NMAKE执行整个makefile文件即使有错误产生。如果只想忽略某些命令或是某部分makefile的退出代码,可以在命令之前加破折号(-)或是使用.IGNORE指令。

详情请参阅544页的”命令修饰符“节和570页的”点指令“节。想要设置或清除部分makefile的/I选项,可以使用!CMDSITCHES指令。具体请看572页”预处理指令“一节。

想要忽略生成过程无关部分的错误,可以使用/K选项。/I覆盖/K选项,如果两选择项同时被设置。

/K

继续关系依赖树其余部分的生成过程如果一条命令由于错误而中断。默认情况下,NMAKE停止如果有命令返回任一非零的退出值。

如果该选择项被指定,那么当一个命令返回一个非为的退出值,NMAKE停止执行包含该命令的块。NMAKE并不尝试去生成那些取决于该命令结果的目标文件;相反,NMAKE报告一个警告,然后继续生成其他的目标。

如果/K选择项被指定同时生成过程并没有结束,NMAKE返回一个退出值1。这与/I选项不同,/I选项完全忽略退出代码。/I覆盖/K选项如果它们同时被指定。/C选项禁止/K选项报告的警告信息。

/M

交换NMAKE到磁盘以保存延长或扩充的内存在MS-DOS。默认情况下,NMAKE在低地址内存留下空间给命令执行通过交换它自己到扩展的内存(如果有足够的空间存在)或是扩充的内存(如果没有足够的扩展的内存,但有足够的扩充内存)或磁盘。

/M选择项让NMAKE忽略任何的可扩展的内存或是可扩充内存,而只交换自己到磁盘。

/N

显示但并不执行那些在生成过程中会被执行的命令。该选择项对于调试makefile和查看那个目标过期时非常有用。

想要设置或清除makefile文件的某部分/N选择项,可使用!CMDSWITCHES指令。详情见572页”预处理指令“节。

/NOLOGO

禁止输出NMAKE版权信息。

/P

在开始NMAKE会话前,打印NMAKE的信息到标准输出设备,包括所有的宏定义、推导规则、目标描述块和.SUFFIXES列表。

如果/P选择项被指定但没有提供makefile文件或是命令行目标,那么NMAKE打印信息但并不报告错误。/P和/D选择项对于高度makefile文件非常有用。

/Q

检查在生成过程中可能会更新的目标文件的时间戳但并不执行生成过程。如果目标文件都是最新的,那么NMAKE返回一个零值;如果任一目标文件过期了,那么NMAKE返回一个非零值。

只有makefile文件中的预处理命令将会被执行。该选择项在批处理文件中调用NMAKE时非常有用。

/R

清空.SUFFIXES列表且忽略那些定义在TOOLS.INT文件中或是预定义的推导规则和宏定义。

/S

禁止所有的执行命令的输出。为了禁止某一执行命令的输出,使用@命令修饰符或是使用.SILENT指令。详情请参阅544页的”命令修饰符“节和570页的”点指令“节。

想要设置或清除makefile文件的某部分/S选择项,可使用!CMDSWITCHES指令。详情见572页”预处理指令“节。

/T

修改命令行目标(或是makefile文件中第一个目标文件如果命令行中并没指定任何目标)的时间戳为当前时间并且执行预处理命令但并不执行生成过程。

目标文件的内容并没有改变。

/V

引起递归时所有的宏被继承。默认情况下,只有定义在命令行和环境变量中的宏定义是被继承的当NMAKE调用递归时。该选择项使所有的宏定义在NMAKE调用递归期间都有效。详情见563页”继承的宏定义“节。

/X filename

发送所有的NMAKE错误输出到filename,filename可以是文件或是设备。

filename之前可以加空格或制表符。如果您在filename之前加破折号(-),NMAKE发送它的错误输出到标准的输出设备。

默认情况下,NMAKE发送错误输出到标准错误流。 该选择项并不影响那些由makefile中的命令产生的发送到标准错误流的错误输出。

/?

打印一份NMAKE命令行句法的简要总结并退出到操作系统。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: