1、命令行中调用nmake的基本语法:

namke /f  makefile /x stderrfile  [macrodefs] [targets]

其中makefile为makefile文件,/x stderrfile为可选参数,即把nmake错误存储到文件stderrfile。

2、makefile的主要语法:

2.1 注释

makefile的注释以#开头,如:

# Usage: NMAKE CLEAN (removes all intermediary files)
      # or: NMAKE options (builds one library variant (see below))

2.2 宏

Makefile的一个重要组成部分是宏。Makefile中的宏和C语言的中宏类似,其实质就是字符串替换。其语法很简单,如下:

macro name =  macro value

直译就是宏名 =  宏的值

VS预定义了很多宏,如OUTDIR,你可以在你的Makefile重新定义这些宏以覆盖原来的值。

宏可以使用环境变量,如你的系统有一个OPEN_SOURCE的环境变量,然后你可以这样定义宏:

THIRD_PARTY  =  $(OPEN_SOURCE)

宏的引用用法是 $(宏名)。

2.3 预处理指令

Makefile的预处理指令和C语言的预处理指令类似,其常用指令如下:

!ERROR string      ——    显示错误“string”, 然后停止执行,错误代码为U1050

!MESSAGE string  ——   显示字符串,这个一般用于信息显示C语言的#pragma message

!INCLUDE [<]filename[>] —— 包含makefile。

!IF const ——  如果成立(非零),则处理!F和下一个!ELSE或!ENDIF之间的语句

还有诸如!IFDEF macroname、!IFNDEF macroname、!ELSE、!ELSEIF、!ELSEIFDEF、!ELSEIFNDEF、!ENDIF和C语言的#if之类的指令的意义是一致的.

2.4 描述块

基本语法:

目标:依赖项

  命令

3、示例

新建名为ConsoleTest的控制台程序,在ConsoleTest目录下新建名为ConsoleTest.vc的文件,用记事本输入:

all: ConsoleTest.exe
# compile
stdafx.obj: stdafx.cpp
cl -c -D_X86=1 -DWIN32 -D_DEBUG -D_CONSOLE -Istdafx.h stdafx.cpp ConsoleTest.obj: ConsoleTest.cpp stdafx.obj
cl -c -D_X86=1 -DWIN32 -D_DEBUG -D_CONSOLE -Istdafx.h ConsoleTest.cpp # link
ConsoleTest.exe: ConsoleTest.obj
link /INCREMENTAL:YES /NOLOGO /subsystem:console /out:ConsoleTest.exe ConsoleTest.obj kernel32.lib clean:
@-if exist *.obj del *.obj

  cl和link简述:

cl的一些常用选项:

-c: 编译但不链接

-D: 定义预处理器,如-D_X86=1:指定在x86平台上编译,-D_DEBUG:定义预处理器_DEBUG,

-I:包含的头文件

cl的最后一个参数是所编译的文件。

link的一些常用选项:

/INCREMENTAL:是否启用增量链接,YES为启用,NO为不启用,

/NOLOGO: 取消显示启动版权标志

/SUBSYSTEM:指定子系统,在PC桌面程序上一般是两个选项:console(控制台程序)和WINDOWS(非控制台程序)。

/out: 指定输出的文件。

link最后的参数是需要链接的obj文件和库文件。

clean下面的@-if指令可以这么写:-if,其运行结果是一样的,但是有命令的回显。另外直接写成:if,也可以执行。

05-11 19:20