小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

nmake.exe使用整理

 量子記憶 2020-02-24

    具體可以參考羅云彬先生的《Windows環(huán)境下32位匯編語(yǔ)言程序設(shè)計(jì)》

    我現(xiàn)在編譯匯編程序的主要工具有兩個(gè)。

    一個(gè)是RadASM,這是一個(gè)集成的IDE使用起來(lái)非常的方便,資源編輯器,調(diào)試器等全都幫你配置好了,也許要設(shè)置一下執(zhí)行的環(huán)境變量但基本使用是沒(méi)什么問(wèn)題。

    還有一個(gè)是MASM32 SDK軟件包(下載:http:///)。但是有一個(gè)點(diǎn)很麻煩,就是匯編程序的編譯鏈接都是要自己來(lái)的,即使MASM32提供了很完整的工具,但是在dos下打這幾個(gè)命令還是要花很多時(shí)間,有沒(méi)有辦法可以讓這個(gè)過(guò)程變得簡(jiǎn)潔? nmake工具就可以做到。其實(shí)就是make工具,類似一個(gè)批處理工具,能夠把一系列的操作和命令集合起來(lái)一起執(zhí)行,下面開始總結(jié)一下nmake的使用方法和參數(shù),該工具可在VC++中Bin目錄下找到:

    注意: nmake的這種make工具需要一個(gè)描述文件一般默認(rèn)叫makefile,需要自己創(chuàng)建,改名

    你可以直接在nmake.exe所在目錄下用命令行窗口打出nmake /?就可以看到如圖的幫助信息:


nmake的語(yǔ)法:

    nmake [選項(xiàng)] [ /f makefile ] [ /x stderrfile ] [ macrodefs ] [ targets ]

/f: nmake需要一個(gè)類似于文件來(lái)指導(dǎo)nmake的工作,就像你編寫程序,編譯器來(lái)執(zhí)行一樣。這個(gè)文件名字默認(rèn)是makefile,如果你想改,那就用/f選項(xiàng)后面跟你要的文件名字。

/x:如果你想把nmake的輸出信息保存在一個(gè)文件里那就用這個(gè)選項(xiàng),比如nmake /x a.txt。那么nmake所輸出的執(zhí)行信息都會(huì)存儲(chǔ)在a.txt中。類似Linux或dos中的重定向,但是這里是/x選項(xiàng)

macrodefs:用新的定義覆蓋描述文件中的宏定義

目標(biāo): 在makefile中執(zhí)行哪一條(下面詳細(xì)說(shuō)明)

/A:不檢測(cè)文件時(shí)間,強(qiáng)制更新所有文件

/B:文件時(shí)間相等時(shí)也更新文件

/D:make時(shí)顯示文件新舊信息

/N:make時(shí)顯示執(zhí)行命令但并不真正執(zhí)行

/P:make時(shí)顯示詳細(xì)信息

PS:nmake是基于時(shí)間的,如果電腦時(shí)鐘有問(wèn)題或者拷貝到另一臺(tái)電腦,那么可能導(dǎo)致文件更新不準(zhǔn),可用/A選項(xiàng)強(qiáng)制更新

描述文件的語(yǔ)法:

1.注釋和換行

與Linux的shell腳本一樣,用#作為注釋。 \是換行符 如果一條命令太長(zhǎng),可以用\來(lái)?yè)Q一行寫。下面會(huì)舉例子

2.宏定義

你可以用一些變量來(lái)定義一個(gè)或多個(gè)常量。比如WORKPATH=C:\\Users\\..... 之類,你用的時(shí)候就可以直接打$(WORKPATH)或者$WORKPATH就可以了。感覺(jué)和Linux中的${xxxx} 很像吧?

幾個(gè)特殊的內(nèi)定宏:

a. $@ ----> 全路徑的目標(biāo)文件

b. $*  ----> 除去擴(kuò)展名的全路徑目標(biāo)文件

c.$?  ----> 全部的源文件名

d.$< ----> 源文件名 (只能用在隱式規(guī)則里,隱式規(guī)則在下方第4點(diǎn))

3.顯式規(guī)則

這種就是如果你打入了nmake就會(huì)直接執(zhí)行的規(guī)則,有兩種語(yǔ)法寫:

第一種是:    目標(biāo)文件: 依賴文件; 命令

第二種是:    目標(biāo)文件: 依賴文件 \n\t命令 (這里的\n\t意思是先一個(gè)回車換行,然后在下一行打一個(gè)tab鍵在開始寫命令)

;分割線之前是宏定義,就是上面第二小點(diǎn), 這里定義后面變量可以有多個(gè),比如OBJ = a.obj b.obj都是可以的
ASM = a.asm 
OBJ = a.obj
EXE = test.exe

#如果是Win32就是windows
LINK_FLAG = /subsystem:console 
ML_FLAG = /c /coff
#下面是顯式規(guī)則-----------------------
#第一種寫法, 這里是編譯匯編程序
#這句話的意思是如果要生成$(OBJ)文件就必
#須具備 $(ASM)文件,分號(hào)后面是命令,那些#變量照著上面宏定義看就行了
$(OBJ):$(ASM); ml $(ML_FLAG) $(ASM)
#第二種寫法
#唯一的區(qū)別就是分號(hào)變成了換一行然后打個(gè)#TAB在輸入命令,這是鏈接過(guò)程
$(EXE):$(OBJ)
	Link $(LINK_FLAG) $(OBJ) /out:test.exe


如果你僅僅只想執(zhí)行其中的某一步比如說(shuō)編譯,那么你可以:直接打入nmake /x makefile_new a.obj,就行了,也就是(目標(biāo)文件: 依賴文件 \n\t命令)中的目標(biāo)文件那對(duì)應(yīng)的東西。 


我目錄里有兩個(gè)描述文件,如果你用的是Makefile(默認(rèn))中的規(guī)則,那你就:


便可全部執(zhí)行。不用加/x

4.隱式規(guī)則

大體和顯式規(guī)則相同,如下:

第一種是:    .源擴(kuò)展名.目標(biāo)擴(kuò)展名:   ;命令

第二種是:    .源擴(kuò)展名.目標(biāo)擴(kuò)展名:\n\t命令 (擴(kuò)展名就是比如text.txt中,那個(gè)"txt"就是擴(kuò)展名)

ASM = a.asm
OBJ = a.obj
EXE = test.exe
LINK_FLAG = /subsystem:console
ML_FLAG = /c /coff

#顯式規(guī)則
$(OBJ):$(ASM); ml $(ML_FLAG) $(ASM)


$(EXE):$(OBJ)
	Link $(LINK_FLAG) $(OBJ) /out:test.exe

#隱式規(guī)則
#第一種寫法
.asm.obj: ;ml $(ML_FLAG) $<

#第二種寫法
.obj.exe:
	Link $(LINK_FLAG) $<

clean:  #如果要執(zhí)行就需要打nmake clean才會(huì)執(zhí)行(默認(rèn)描述文件為makefile)
	del *.obj
	del .exe
值得注意的是: 隱式規(guī)則由于不能有依賴文件,所以冒號(hào)后面是啥也沒(méi)有。還有其命令中不能包含文件名,它后面跟的都是一類相同擴(kuò)展名的整類文件,所以用上面說(shuō)的內(nèi)定宏來(lái)描述。比如.asm.obj ;ml $(ML_FLAG) $<中的$<就代表源文件名就是.asm擴(kuò)展名的文件。
ASM = a.asm
OBJ = a.obj
EXE = test.exe
LINK_FLAG = /subsystem:console
ML_FLAG = /c /coff

#顯式規(guī)則
$(OBJ):$(ASM); ml $(ML_FLAG) $(ASM)


$(EXE):$(OBJ)
	Link $(LINK_FLAG) $(OBJ) /out:test.exe



#如果如下那種顯式規(guī)則沒(méi)有命令的,那么它們會(huì)去隱式規(guī)則中找命令
#下面這句的意思是如果Common.inc存在的話,為了產(chǎn)生$(OBJ), 就找到來(lái)執(zhí)行
$(OBJ):Common.inc	
a.obj: a.inc



.asm.obj: ;ml $(ML_FLAG) $<


.obj.exe:
	Link $(LINK_FLAG) $<

clean: 
	del *.obj
	del .exe

(完)

    

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多