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,也可以執行。