標 題: Jack架設WIN32組譯工具的開發環境作 者: Jack Yang時 間: 2007-02-25 15:18鏈 接: http://blog.csdn.net/magus_yang/archive/2007/02/25/1514026.aspx1. 下載並安裝Ultraedithttp://www.ultraedit.com/我安裝的版本是12.20b+1官方中文版,安裝路徑不重要。 2. 下載並安裝MASMhttp://www.masm32.com/我安裝的是Version 9,安裝路徑為:D:/masm32 3. make工具http://211.90.241.130:22366/view.asp?file=53壓縮包中有兩個make工具nmake.exe是Microsoft (R) Program Maintenance Utility Version 1.50make.exe是MAKE Version 4.0 Copyright (c) 1987, 1996 Borland International這兩個make工具所支援的Makefile文法和常用的選項大同小異。把nmake.exe和make.exe解壓到Masm32安裝目錄的bin子目錄下。 4. 編寫一個用於設定環境變數的批次檔var.bat檔案的內容如下:@echo off
rem 請根據 Masm32 軟體包的安裝目錄修改下面的 Masm32Dir 環境變數!
set Masm32Dir=D:Masm32
set include=%Masm32Dir%Include;%include%
set lib=%Masm32Dir%lib;%lib%
set path=%Masm32Dir%Bin;%Masm32Dir%;%PATH%
echo on
每開啟一個新的命令列控制台,就要執行一次var.bat檔案。省力的做法是把環境變數添加到使用者變數,或系統變數中去。可以使用下列命令查看環境變數的設定情況:C:/>echo %include%C:/>echo %lib%C:/>echo %path% 5. 編寫makefilemakefile的內容如下:EXE = Test.exe #指定輸出檔案
OBJS = Test.obj #需要的目標檔案
RES = Test.res #需要的資源檔
LINK_FLAG = /subsystem:windows #串連選項
ML_FLAG = /c /coff #編譯選項
$(EXE): $(OBJS) $(RES)
Link $(LINK_FLAG) $(OBJS) $(RES)
.asm.obj:
ml $(ML_FLAG) $<
.rc.res:
rc $<
clean:
del *.obj
del *.res
需要注意的地方:1) nmake預設將Makefile檔案的第一條規則中的目標檔案作為最終檔案。例子中的最終檔案就是Test.exe2) 引用EXE或OBJS這些宏時一定要加上括弧,如:$(EXE)、$(OBJS) 、$(RES)3) makefile的分行符號是“/”,“/”後面不能再加上其它字元,包括注釋和空格4) 隱含規則中幾個用來指定檔案名稱的特殊預定義宏$@ - 目標檔案的全路徑檔案名稱$* - 目標檔案的除去副檔名的全路徑檔案名稱$? - 所有源檔案(依賴檔案)的檔案名稱$< - 源檔案(依賴檔案)的檔案名稱5) 顯式規則的定義格式:
目標檔案 : 依賴檔案
命令6) 隱含規則的定義格式:
.源副檔名.目標副檔名:
命令 用MASM編譯和連結一個Win32彙編來源程式常用的命令是:ml /c /coff xx.asmlink /subsystem:windows xx.obj yy.lib zz.res (普通PE檔案)link /subsystem:console xx.obj yy.lib zz.res (控制台檔案)link /subsystem:windows /dll /def:aa.def xx.obj yy.lib zz.res (DLL檔案)
6. 執行nmake.exenmake的常用選項如下:/? 顯示協助資訊 /f 指定描述檔案(makefile)的檔案名稱/x 把螢幕輸出的資訊存到一個檔案中/a 強制更新所有檔案/b 檔案時間相等時也要更新檔案/d make時顯示檔案新舊資訊/n 顯示make時要執行的命令,但並不真正執行/p make是顯示詳細的資訊宏定義 用新的定義覆蓋描述檔案(makefile)中的宏定義目標 指定建立描述檔案(makefile)中描述的某個檔案
如:
make clean
用於清除編譯過程中產生的臨時檔案,即執行del *.obj和del *.res兩條命令;
make test.obj
只編譯test.asm產生test.obj檔案;
make test.res
只編譯test.rc產生test.res檔案; Win32組譯工具的開發調試過程:編譯來源程式->切換到MS-DOS視窗->鍵入nmake編譯->運行產生的可執行檔->切換到文字編輯器修改來源程式........如此迴圈往複偵錯工具。 參考資料:羅雲彬的《Windows環境下32位組合語言程式設計》(第二版)第二章