標籤:
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的檔案,用記事本輸入:
| 1234567891011121314 |
all: ConsoleTest.exe# compilestdafx.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 # linkConsoleTest.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,也可以執行。
(轉)nmake學習筆記