VC中使用nmake命令編譯方法

2021-07-04 15:44:53 字數 4433 閱讀 5445

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

/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命令列句法的簡要總結並退出到作業系統。

vc中使用nmake命令編譯方法

由於最近工程較多,在si的時候很是麻煩,將所有的工程都編譯一次,再將可執行檔案和生成的庫檔案全部拷貝到bin目錄下,真的做了一次以後就感覺工作量的巨大,可能也是人比較懶的原因,以前就聽說過vc可以用命令列編譯於是上網狂搜,終於做了乙個p處理,以後省事了,只要不改依存邏輯,以後就一鍵si了,哈哈。啊,...

NMAKE命令列編譯

vc98 binvcvars32.bat 設定環境變數 nmake f filename.mak nmake 選項下表描述了 nmake 選項。選項前有斜槓 或短劃線 並且不區分大小寫。使用 cmdswitches 更改生成檔案或 tools.ini 中的選項設定。選項 用途 a 強制生成所有已評估...

NMake命令方式編譯MFC程式

編譯環境 visual c 6.0 命令工具 nmake cl link 程式功能 使用mfc方式建立乙個對話方塊.從網路下visual c 6.0 綠色版或者安裝版,安裝完成後,目錄 vc98 bin下應該有nmake程式,cl程式和link程式 採用mfc構建乙個簡單的對話方塊.首先使用visu...