|
具體可以參考羅云彬先生的《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鍵在開始寫命令) 如果你僅僅只想執(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ò)展名) 值得注意的是: 隱式規(guī)則由于不能有依賴文件,所以冒號(hào)后面是啥也沒(méi)有。還有其命令中不能包含文件名,它后面跟的都是一類相同擴(kuò)展名的整類文件,所以用上面說(shuō)的內(nèi)定宏來(lái)描述。比如.asm.obj ;ml $(ML_FLAG) $<中的$<就代表源文件名就是.asm擴(kuò)展名的文件。(完) |
|
|