VS 环境下使用MAKEFILE的工具为NMAKE
注:通常在VS安装目录/VC/BIN 里面,如果在控制台输入此命令无效,可以此路径添加到环境变量PATH里
NMAKE 使用MAKEFILE的语法为
Nmake /f makefile /x stderrfile [macrodefs][targets]
注:makefile 为makefile文件,/xstderrfile为可选参数,即把namke错误存储到文件stderrfile
MAKEFILE 语法
宏
MAKEFILE 的宏与C语言的宏类似
macro name= macro value
例如 OUTDIR= .\Debug
预处理指令
Makefile的预处理指令和C语言的预处理指令类似
常用指令
!ERRORstring —— 显示错误“string”, 然后停止执行,错误代码为U1050
!MESSAGEstring —— 显示字符串,这个一般用于信息显示C语言的#pragmamessage
!INCLUDE[<]filename[>] —— 包含makefile
!IFconst —— 如果成立(非零),则处理!F和下一个!ELSE或!ENDIF之间的语句
还有诸如!IFDEF macroname
!IFNDEF macroname、!ELSE、!ELSEIF、!ELSEIFDEF、!ELSEIFNDEF、!ENDIF和C
语言的#if之类的指令的意义是一致的,这里就不一一详述了
描述块结构
目标:依赖项
命令
目标就是用户最终希望得到的结果,也就是nmake需要生成的结果。目标可以是一个文件、目录,也可以什么都不是。如果目标不存在或者目标的时间戳(文件的最后修改时间)比依赖项早,或者目标类型不是文件,nmake将运行描述块中的“命令”
依赖项是指在生成目标所需要使用到的对象。一个目标可以有一个或多个依赖项,也可以没有依赖项。多个依赖项以空格分隔。如果指定的依赖项不存在,则在其他描述块的目标中寻找,但首先需要生成这个目标
命令是nmake在生成目标时所调用的命令
在使用namke进行程序构建时,nmake采用了时间戳判断机制。在生成一个目标时,会判断目标文件是否存在或目标的最后修改时间是否晚于所有依赖项的最后修改时间。如果所有依赖项的最后修改时间都比目标的最后修改时间晚,则说明当前的目标文件是使用现有的依赖项生成,是最新的,没有必要再进行生成
MAKEFILE 文件结构:
#宏定义
….
#描述块
makefile的一个基本原则:以终为始,这个似乎和我们平时进行的过程式编程的原则相悖。所谓以终为始,就是你通过makefile文件首先告诉编译器这个工程是想生成一个exe还是一个dll还是一个静态库。然后告诉编译器要生成这个exe之类需要生成哪些obj文件</