nmake學習筆記


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM