国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
如何配置RadASM來支持你的編譯器

如何配置RadASM來支持你的編譯器

cao_cong

這兩天打算配置一下RadASM來支持一下 LCC-Win32 和 Turbo C++ 3.0,雖然以前給 RadASM配置過支持VC6的Cpp文件,但當(dāng)時(shí)做完就沒管了,我這人又比較懶,不愿寫東西,導(dǎo)致現(xiàn)在再配置時(shí)很多東西都忘了。這次只好又重新研究了一番,費(fèi)時(shí)費(fèi)力。配置完LCC后真有點(diǎn)筋疲力盡,不管別的了,先把配置的過程寫下來,一是以后要用時(shí)可以看看,二也希望寫出來讓大家看了也能對配置編譯器的過程清楚一點(diǎn),可以自己動(dòng)手來配置RadASM支持自己喜歡的編譯器。Turbo C++ 3.0的配置我已經(jīng)不太想繼續(xù)干了,誰有興趣配置好了的話別忘了給我發(fā)一份。
   在配置一個(gè)編譯器之前,首先你要了解你所用的編譯器編譯、連接、資源編譯程序的命令行選項(xiàng),這樣你配置時(shí)才能有的放矢。要知道相關(guān)程序的命令行選項(xiàng)的話你只需在命令提示符中輸入相關(guān)程序就可得到。我一般喜歡在后面加一個(gè) /? 參數(shù)。如這樣:lcc.exe /?。在控制臺(tái)窗口中右擊鼠標(biāo),把顯示的命令行選項(xiàng)全選后復(fù)制到新建的一個(gè)文本文件,以便參考。我這次就以我配置的LCC編譯器支持文件來作為模板,對各個(gè)部分進(jìn)行講解,可能比較羅嗦,主要還是想說清楚一點(diǎn),讓大家少走彎路。有什么說得不對的地方還請大家指正。另外我在配置時(shí)RadASM中提到的菜單及選項(xiàng)等都是基于我自己漢化的RadASM來談的,如果給你造成了什么歧義的話,還請多多原諒。不浪費(fèi)大家時(shí)間了,下面進(jìn)入正題:
在開始之前,我把LCC-Win32 的命令行選項(xiàng)列出來(我都翻譯過了),以便大家對照:
-------------------------------------------------------------------------
lcc.exe(編譯程序) 命令行:
選項(xiàng) 含義
-A 激活所有警告.
-ansic 禁用lcc-win32的語言擴(kuò)展.
-D D后面跟隨定義的符號(hào). 例如:-DNODEBUG 定義
NODEBUG 符號(hào). 注意: 在D和符號(hào)間沒有空格
-check 檢查給定源文件的錯(cuò)誤. 不生成目標(biāo)文件.
-E 生成一個(gè)中間文件及預(yù)處理程序輸出.輸出文件名將根據(jù)輸入文件名來生成, 如,編輯 foo.c 你將得到foo.i.
-E+ 類似于 -E 選項(xiàng), 還會(huì)生成一個(gè)#行號(hào) xxx 指令,預(yù)處理程序生成一個(gè) # xxx 指令.
-EP 類似 -E 選項(xiàng),但不生成 #行號(hào) 指令.
-errout= 附加警告/錯(cuò)誤信息到指定的文件.如 -errout=Myexe.err.將把所有警告和錯(cuò)誤信息附加到 Myexe.err 中。
-eN 設(shè)置最大錯(cuò)誤數(shù)N. 例如:-e25.
-fno-inline 忽略內(nèi)聯(lián)指令.
-Fo<文件名> 強(qiáng)制輸出文件名.
-g2 生成調(diào)試信息.
-g3 支持函數(shù)堆棧跟蹤. 如果遇到一個(gè)中斷,將顯示函數(shù)堆棧.
-g4 支持函數(shù)堆棧及行號(hào)跟蹤.
-g5 支持函數(shù)堆棧,行號(hào)及返回調(diào)用堆棧崩潰跟蹤.
-I 把一個(gè)路徑添加到包含的路徑,如編譯器查找頭文件的路徑.例:-Ic:\project\headers. 注意在I和后面跟隨的路徑之間沒有空格.
-libcdll 使用用于 lcclibc.dll 的聲明.用此選項(xiàng)編譯的文件要在連接器 lcclnk 中使用 -dynamic 選項(xiàng).
-M 在標(biāo)準(zhǔn)輸出中顯示當(dāng)處理給定的輸入文件時(shí)預(yù)處理程序打開的所有文件.不生成目標(biāo)文件.
-M1 在標(biāo)準(zhǔn)輸出中遞歸顯示每個(gè) include 文件,指出其調(diào)用自何處,何時(shí)關(guān)閉.
-nw 不顯示警告.錯(cuò)誤仍將顯示.
-O 優(yōu)化輸出. 這將啟動(dòng) peephole 優(yōu)化器.
-o <文件>用于給定輸出文件的名稱.與上面的 Fo 參數(shù)相同.
-overflowcheck
生成代碼測試所有加,減,乘的溢出.
-p6 啟用 Pentium III 指令
-profile 注入代碼到已生成的程序中來測試執(zhí)行時(shí)間.此選項(xiàng)不兼容調(diào)試級別高于 2 的程序.
-S 生成一個(gè)匯編文件. 輸出文件名依賴于輸入文件.如:編輯 foo.c 你將得到 foo.asm.
-s n 設(shè)置轉(zhuǎn)換密度為 n ,值必須在 0.0 和 1.0 之間. 如: -s 0.1
-shadows 當(dāng)一個(gè)本地變量覆蓋了一個(gè)全局變量時(shí)警告.
-stackinit n
函數(shù)入口值為 "n" 時(shí)初始化未初始化的堆棧.
-U 未定義符號(hào)跟隨在U后面.
-unused 警告未使用的分配并禁止垃圾代碼.
-v 顯示編譯器版本和編輯日期
-z 生成一個(gè) LCC 中間語言的文件.生成的文件以 .lil 為擴(kuò)展名.
-Zp[1,2,4,8,16] 設(shè)置結(jié)構(gòu)的默認(rèn)隊(duì)列為一, 二, 四,等.
如果你設(shè)為一,實(shí)際上等于無隊(duì)列.
-------------------------------------------------------------------------
命令行選擇區(qū)分大小寫.使用 "-" 或 "/" 在
命令行中引入選項(xiàng).

-------------------------------------------------------------------------
lcclnk.exe(連接程序) 命令行:
Lcclnk 命令行選項(xiàng).使用 "-" 或 "/" 在命令行中引入選項(xiàng).
-o <文件名>
設(shè)置輸出文件名稱.請?jiān)?o 和文件名間插入一個(gè)空格.
-errout<文件名>
把所有警告/錯(cuò)誤信息寫入到指定名稱的文件.
-subsystem <subsystem>
指出輸出文件類型. Console 或 windows 程序
-stack-commit <數(shù)字>
選擇此選項(xiàng),你可以提交多于一個(gè)的頁面(4096 字節(jié)).
-stack-reserve <數(shù)字>
默認(rèn)堆棧大小為 1MB. 用此選項(xiàng)改變限制.
-dynamic
使用 lcclibc.dll 作為默認(rèn)庫并動(dòng)態(tài)鏈接到程序,用以代替連接到 libc.lib.
-dll
此選項(xiàng)告訴連接程序這是一個(gè) .dll 文件而不是一個(gè) .exe 文件.
-map <文件名>
指定 map 文件名.此選項(xiàng)不兼容 -s 選項(xiàng).
-nolibc
不包括標(biāo)準(zhǔn) C 程序庫.
-s
從程序中去除所有符號(hào)和調(diào)試信息.
-version nn.nn
為程序添加版本號(hào).
-errout=<文件名>
寫入所有警告或錯(cuò)誤到給定名稱的文件.注意在文件名和等號(hào)間沒有空格.
-nounderscores
例如創(chuàng)建一個(gè)用于 Visual Basic 的 DLL 時(shí),最好 DLL 的輸出函數(shù)名沒有下劃線.
-entry <fnname>
設(shè)置 DLL 的入口點(diǎn)函數(shù)
-version
輸出版本名稱

-------------------------------------------------------------------------
lcclib.exe(編譯庫(Lib)的工具) 命令行:
格式:
lcclib <libfile.lib> <目標(biāo)文件>
選項(xiàng):
/out:輸出文件
/extract:目標(biāo)
/remove:目標(biāo)
/verbose: 顯示輸出過程
默認(rèn)同名的目標(biāo)文件將被替換

-------------------------------------------------------------------------
lrc.exe(編譯資源腳本的程序) 命令行:

用法: lrc [選項(xiàng)] .RC 輸入文件
選項(xiàng):
/r: 生成 .RES 文件.這是預(yù)設(shè)好的...
/v: 顯示細(xì)節(jié)(Verbose)
/z: 生成一個(gè) .map 文件.名稱依賴于輸入文件
/d: 定義符號(hào)
/o: 輸出到指定文件.
'o' 和文件名間沒有空格
/fo: 輸出到指定文件.
'o' 和文件名間沒有空格
/l: 默認(rèn)語言號(hào)
后面應(yīng)立即跟隨十進(jìn)制的語言號(hào).'l'和語言號(hào)之間沒有空格
/i: 添加一個(gè) include 路徑.
'i'和路徑間沒有空格
/a: 寫打包文件(圖標(biāo),位圖, 等等)
選項(xiàng)不區(qū)分大小寫
-------------------------------------------------------------------------
   配置一個(gè)讓RadASM支持的編譯器只需寫一個(gè)INI文件,把各個(gè)段配置好。配置好后放在RadASM目錄,直接在RadASM的菜單選項(xiàng)->編程語言中把你的配置文件添加進(jìn)去就可以了。我這里把配置的文件命名為Lcc.ini,我把每個(gè)段都列出來(列主要我們要配置的部分),各個(gè)段的含義我在每個(gè)列出的段后用“//”開頭的注釋說明。
[Description]
1=Lcc Win32

//這個(gè)段是對你配置的編譯器描述,你可以隨便寫。

[Enviroment]
1=path,C:\Lcc\Bin;

//這相當(dāng)于環(huán)境變量,RadASM會(huì)到path后面指定的路徑查找相關(guān)程序。

[CharTab]
2=0251222522222236;20-2F
3=1111111111222221;30-3F

//字符表定義,0到127的默認(rèn)字符表,與我們沒多少關(guān)系,隨便在RadASM中找一個(gè)配置好的編譯器支持文件復(fù)制過來就行了。

[Open]
0="C++ 文件 (*.c;*.cpp;*.h),*.c;*.cpp;*.h"
1="資源文件 (*.rc),*.rc"
2="文本文件 (*.txt),*.txt"
3="宏文件 (*.dsm),*.dsm"
4="所有文件 (*.*),*.*"
src="C++ 文件 (*.cpp),*.cpp,cpp"
hdr="頭文件 (*.h),*.h,h"
mod="模塊 (*.cpp),*.cpp,cpp"

//工程中默認(rèn)打開的文件類型列表,根據(jù)你的編譯器源文件類型進(jìn)行修改。

[CodeMacro]
;關(guān)鍵字,活動(dòng)行前插入,活動(dòng)行后插入
;{I}=從關(guān)鍵字行復(fù)制縮進(jìn)
;{C}=回車符
;{S}=空格符
;{T}=制表符
;{$}=復(fù)制 Proc/Struct 名稱
;宏的設(shè)置默認(rèn)已開啟自動(dòng)縮進(jìn)
1=if(),{{C}{T},{C}{I}}
2=else,{T},
3=elseif,{T},
4=while,{T},{C}{I}
;5=
6=$ ),{{C}{I}{T},{C}{I}}
7=struct $,{T},{C}{I}}
8=for(),{{C}{T},{C}{I}}
9={,{T},{C}{I}}
;10=

//這個(gè)段稱之為代碼宏,就是當(dāng)你在RadASM的編輯器中輸入代碼時(shí)根據(jù)你的輸入自動(dòng)完成的內(nèi)容。“;”后為注釋,我翻譯了一下。我們選1=if(),{{C}{T},{C}{I}}這條來講解一下其含義:1是序號(hào),不用多說,if(),{{C}{T},{C}{I}}是指當(dāng)我在編輯器中輸入if()回車后,首先在第二行開始輸出一個(gè)“{”再自動(dòng)回車到下一行開始輸出一個(gè)制表符,再回車到第四行把第一行的if()開始位置復(fù)制過來,后面跟一個(gè)“}”,光標(biāo)的位置定位在第二行的制表符后。實(shí)際效果如下:
if()
{
   //光標(biāo)位置
}
if(),{{C}{T},{C}{I}}中if()是指自動(dòng)完成時(shí)的關(guān)鍵字,緊跟在逗號(hào)后的{{C}{T}指在活動(dòng)光標(biāo)前插入的字符,最后的{C}{I}}是指在活動(dòng)光標(biāo)后插入的字符。在這個(gè)段中的{$}是用來復(fù)制函數(shù)或結(jié)構(gòu)名稱的。我在6=$),{{C}{I}{T},{C}{I}}中配置的$ )是希望我輸入一個(gè)函數(shù)并加 )后能自動(dòng)給我完成的,可惜好象工作的不好,只對匯編的編譯器有效。

[Code]
ParseDll=CppParse.dll
Skip=
Code=
Const=
Data=
Macro=
Struct=
Label=

//這個(gè)段功能是用于查找并獲取代碼屬性的。對匯編語言支持比較好。舉個(gè)masm里的例子:Code=? endp,$ proc意思是指識(shí)別為代碼時(shí)檢測任意名稱命名的 proc,結(jié)束為 endp。例如:
test proc
...
endp
在masm工程中就會(huì)把此部分識(shí)別為代碼。

[CodeBlock]
1={,},,,0
2=
3=
4=
5=
6=
7=
8=
9=
10=
11=
12=
13=
14=
15=

//代碼塊,用于標(biāo)記可折疊的代碼塊。如1={,},,,0是指開始為“{”結(jié)束為“}”的就標(biāo)記為代碼塊,將會(huì)自動(dòng)在第一個(gè)開始的 { 那放一個(gè)可折疊的標(biāo)記。后面各個(gè)逗號(hào)中選項(xiàng)大家可以參考幫助文件。最后的那個(gè)0是標(biāo)志位。

[Api]
Trig=
Call=Masm\masmApiCall.api
Const=Masm\masmApiConst.api
Struct=Masm\masmApiStruct.api
Word=Cpp\cppWord.api
Message=Masm\masmMessage.api
Type=Cpp\cppType.api
inc=#include,","
lib=

//這是代碼書寫助手(Code write helpers)的功能。在你寫代碼時(shí)自動(dòng)列出函數(shù)及在工具欄上顯示函數(shù)。根據(jù)情況定義各個(gè)文件。

[Edit]
CodeFiles=.c.cpp.h.rc.tpl.rad.def.api.nsi.dsm.

//這個(gè)段是配置編輯環(huán)境的,可在RadASM的選項(xiàng)中直接配置,我不全列出來了?;旧峡梢哉覀€(gè)配置好的編譯器文件照抄。主要注意上面的這條,這是你的編譯器要使用的文件。

[Dialog]
...

//這是對話框編輯器中的選項(xiàng),可以在選項(xiàng)中設(shè)置。照抄別的。

[Error]
BookMark=3
nAsm=99
Identify=Error
Skip=2

//根據(jù)作者給我的最新的2.2.0.6版本中的解釋,各個(gè)關(guān)鍵詞的含義如下:

BookMark=3

//這句對應(yīng)2.2.0.6版本中代碼編輯器選項(xiàng)中新增加的編譯器錯(cuò)誤處理部分的內(nèi)容??稍谶x項(xiàng)中設(shè)置。

nAsm=99

//這句是指定編譯器的。僅當(dāng)不在 [Code] 段中具體設(shè)置編譯器時(shí)才需考慮。各個(gè)含義如下:

MASM=1
TASM=2
FASM=3
GOASM=4
NASM=5
HLA=6
CPP=7
BCET=8
其他編譯器=99

如果我們要配置新的非以上類型的編譯器的話,就應(yīng)設(shè)成象上面一樣:nAsm=99

Identify=Error

//這句是指錯(cuò)誤的關(guān)鍵字是什么。

Skip=2

//這句是指在輸出窗口中發(fā)現(xiàn)了在 Identify 中指定的關(guān)鍵字內(nèi)容后,在文件名前跳過的單詞個(gè)數(shù)。如象下面這樣的錯(cuò)誤:
Error E2378 test.cpp 26: Return statement missing ; ……
就會(huì)跳過前面的 Error 和 E2378 這兩個(gè)詞后定位到文件名上。這樣 RadASM 就能正確跳到出錯(cuò)行了。

[Paths]
$A=C:\Lcc
$B=$A\Bin
$D=$R\AddIns
$H=masm32\Help
$I=$A\Include
$L=$A\Lib
$P=$R\Lcc\Projects
$S=$R\Lcc\Sniplets
$T=$R\Lcc\Templates
$M=$R\Lcc\Macro
$E=C:\Ollydbg

//這個(gè)段是路徑設(shè)置,各個(gè)標(biāo)志與設(shè)置路徑選項(xiàng)中對應(yīng)為:$A->App:,編譯器的安裝路徑;$B->Bin:,編譯、連接、資源編譯等程序的路徑。其它的我就不講了,比較簡單。只是注意$R是指RadASM的安裝路徑。如你的RadASM安裝在E:\RadASM,$R就指這個(gè)目錄。這些標(biāo)志可在下面的工程配置中使用。

[MakeFiles]
0=.rap
1=.rc
2=.cpp
3=.obj
4=.res
5=.exe
6=.def
7=.dll
8=.txt
9=.lib
10=.mak
11=.c
12=.com
13=.ocx
14=.idl
15=.tlb

//這個(gè)段是用于在創(chuàng)建工程時(shí)每個(gè)工程中所包含的文件類型。記住上面各個(gè)序號(hào)對應(yīng)的文件類型,后面要用到。

[Project]
Type=Win32 App,Console App,Dll Project,Ocx Project,LIB Project,Win32 App (no res),Dll Project (no res),Ocx Project (no res)
Files=cpp,h,Rc,Def,Txt,Mak,dsm,idl
Folders=Bak,Mod,Res
MenuMake=編譯資源腳本,編譯,連接,構(gòu)建,構(gòu)建并運(yùn)行,運(yùn)行,在調(diào)試器中運(yùn)行,全部構(gòu)建并運(yùn)行,編譯模塊
Group=1
GroupExpand=1

//終于接近最關(guān)鍵的部分了。這個(gè)段是設(shè)置你的編譯器所支持的編譯程序類型等。在Type后面定義的是工程類型,名字將作為下面每個(gè)具體工程配置段的關(guān)鍵字。Files后面是指工程中所用到的文件類型,用擴(kuò)展名表示。Folders后面是指出建立工程時(shí)在新建的工程目錄下有哪些子目錄可用。Bak目錄用于備份你的每次修改;Mod目錄我不太清楚,大概是用于模塊(module)的目錄,基本沒選過這個(gè)目錄。Res目錄是用來保存你的資源文件的。MenuMake后面是指在RadASM構(gòu)建菜單下的子菜單中顯示的項(xiàng)目。后面的Group和GroupExpand是用來定義工程組的,照抄就行了。

[MakeDefNoProject]
MenuMake=1,1,1,1,1,1,1,0,0
1=rsrc.res,O,$D\RC.EXE /v,rsrc.rc
2=$.obj,O,$B\LCC.EXE /O /unused /c /errout=error.txt /I"$I",$.cpp
3=$.exe,O,$B\LCCLNK.EXE /s /SUBSYSTEM WINDOWS,$.obj,$.res
4=0,0,,$.exe
5=rsrc.obj,O,$D\CVTRES.EXE,rsrc.res
6=*.obj,O,$B\LCC.EXE /O /unused /c /errout=error.txt /I"$I",*.cpp
7=0,0,"$E\OllyDbg",$.exe
11=rsrc.res,O,$D\RC.EXE /v,rsrc.rc
12=$.obj,O,$B\LCC.EXE /g2 /O /unused /c /errout=error.txt /I"$I",$.cpp
13=$.exe,O,$B\LCCLNK.EXE /SUBSYSTEM WINDOWS,$.obj,$.res
14=0,0,,$.exe
15=rsrc.obj,O,$D\CVTRES.EXE,rsrc.res
16=*.obj,O,$B\LCC.EXE /g2 /O /unused /c /errout=error.txt /I"$I",*.cpp
17=0,0,"$E\OllyDbg",$.exe

//這里是默認(rèn)設(shè)置,就是你不在RadASM中建立工程,只用RadASM打開源文件執(zhí)行編譯時(shí)的配置。這里和下面一段可說是最重要的部分了,請注意看,我一條條的講解,盡量說的清楚點(diǎn)。先說一下可能用到的幾個(gè)特殊字符的含義:
$:從RadASM編輯器的最頂部標(biāo)題欄中獲取的不帶擴(kuò)展名的文件名。如打開test工程下的名為test.cpp的文件,這里的$就相當(dāng)于test,就等于你不帶擴(kuò)展名的文件名稱。下面會(huì)詳細(xì)說明。
|:這個(gè)符號(hào)將在實(shí)際編譯工程時(shí)替換為“,”(逗號(hào))。如$D\RC.EXE /v,rsrc.rc|test.rc 實(shí)際編譯時(shí)就會(huì)是這樣(假定RadASM裝在E盤根目錄下):E:\RadASM\Addins\RC.EXE /v rsrc.rc,test.rc
*:這個(gè)符號(hào)在編譯模塊(moudle)時(shí)使用。
MenuMake=1,1,1,1,1,1,1,0,0,0 這一條的意思是在構(gòu)建菜單上可用的子菜單項(xiàng)目。我們來看一下上面的Project段中的MenuMake:
MenuMake=編譯資源腳本,編譯,連接,構(gòu)建,構(gòu)建并運(yùn)行,運(yùn)行,在調(diào)試器中運(yùn)行,全部構(gòu)建并運(yùn)行,編譯模塊
我們數(shù)一下,每個(gè)逗號(hào)分隔的算一個(gè)項(xiàng)目,共有9個(gè)。再看MenuMake=1,1,1,1,1,1,1,0,0,0 共有9個(gè)。這里個(gè)數(shù)無所謂,1是指對應(yīng)的子菜單激活,0是不激活。這樣MenuMake=1,1,1,1,1,1,1,0,0,0 等同于
MenuMake=編譯資源腳本,編譯,連接,構(gòu)建,構(gòu)建并運(yùn)行,運(yùn)行,在調(diào)試器中運(yùn)行 共7個(gè)子菜單激活。
MenuMake=1,1,1,1,1,1,1,0,0下面的1到17是編譯選項(xiàng),其中1到7是編譯為Release(發(fā)行版)時(shí)的設(shè)置,11到17是指編譯為Debug(調(diào)試版)時(shí)的設(shè)置。這里只說1到7的含義,11到17與1到7的類似。首先說一下各個(gè)序號(hào)的含義:1是指資源編譯選項(xiàng);2是指編譯選項(xiàng);3是指連接選項(xiàng);4是指運(yùn)行編譯好的程序;5是用于CVTRES的,轉(zhuǎn)換res文件到obj文件;6是編譯模塊選項(xiàng);7是指在調(diào)試器中運(yùn)行。1到7的含義如下:

1=rsrc.res,O,$D\RC.EXE /v,rsrc.rc

//這條用于編譯資源,用逗號(hào)分隔每個(gè)項(xiàng)。rsrc.res是指在執(zhí)行編譯前如果有這個(gè)文件就先刪掉。O(注意這里不是0,是大寫的字母O)是指在RadASM的輸出窗口中顯示所有執(zhí)行命令行時(shí)的信息。如果這里是大寫字母C,則是指在控制臺(tái)中顯示信息,不在輸出窗口中顯示。其它兩個(gè)參數(shù)OT和CT與O和C含義類似。$D\RC.EXE /v是指執(zhí)行RadASM的Addins目錄下的RC.EXE來編譯后面的rsrc.rc到rsrc.res。/v是RC.EXE的命令行選項(xiàng)。LCC自帶有一個(gè)資源編譯程序,我原來是這樣配置的:1=$.res,O,$B\LRC.EXE /v,$.rc這里的$是指從RadASM編輯器的最頂部標(biāo)題欄中獲取的不帶擴(kuò)展名的文件名。如我打開一個(gè)工程中的文件,RadASM的頂部標(biāo)題顯示如下:
RadASM - dialog - [E:\RadASM\Lcc\projects\dialog\dialog.cpp]
此時(shí)$取的內(nèi)容就是 dialog.cpp 中的 dialog (注意:在RadASM中新建一個(gè)工程時(shí)有兩個(gè)選項(xiàng):一個(gè)是工程名稱,一個(gè)是工程說明。打開一個(gè)工程時(shí)若不打開任何文件的話,在RadASM的頂部顯示的是工程說明的內(nèi)容,但此時(shí)你進(jìn)行編譯的話RadASM取的是工程名稱。如我建的工程名稱是dialog,工程說明是對話框示例,打開這個(gè)工程不打開任何文件時(shí)RadASM頂部顯示的就是RadASM - 對話框示例,但在編譯工程時(shí)$還是用的工程名稱dialog)。這樣如果編譯上面的示例工程的話,1=$.res,O,$B\LRC.EXE /v,$.rc就相當(dāng)于這樣(假定你的LCC編譯器的目錄放在放在E盤的根目錄下,如:E:\LCC,這里的$B是從上面的[Paths]段中來的,你配置好了的話$B就等同于E:\LCC\Bin目錄):
1=dialog.res,O,E:\LCC\Bin\LRC.EXE /v,dialog.rc
為什么沒再用LCC原來自帶的資源編譯器呢?主要是我配置好后測試時(shí),我明明在對話框中選的是宋體,9號(hào),可編譯后的程序按鈕上顯示的不知是什么字體,而且還是個(gè)斜體。搞得我還以為那里弄錯(cuò)了,查了半天。后來看LCC的用戶手冊,才知道它的資源編譯器還不支持字體,說正在改進(jìn)中。為此,我就放棄了它的資源編譯器,還是用微軟的吧。這里注意要把RC.EXE復(fù)制到你RadASM的Addins目錄下。如果你是用我做的漢化版的話,這一步可省略。

2=$.obj,O,$B\LCC.EXE /O /unused /c /errout=error.txt /I"$I",$.cpp

//這條用于編譯程序,$.obj,O 兩個(gè)與上面講的類似,也是先刪除你所做工程名字.obj,在輸出窗口中輸出信息。$B\LCC.EXE/O /unused /c /errout=error.txt /I"$I"是編譯選項(xiàng),后面的/I"$I"是查找include目錄用的。$I就是LCC下的include目錄,如LCC裝在E盤根目錄的話(下面我再講的時(shí)候都默認(rèn)你的RadASM和LCC都裝在E盤根目錄下),$I就代表E:\LCC\include目錄。其實(shí)上面這句在下面具體定義的工程項(xiàng)中還可以這樣寫:
2=3,O,$B\LCC.EXE /O /unused /c /errout=error.txt /I"$I",2
這里與上面那句不同的地方就是把$.obj換成了3,$.cpp換成了2。為什么可以這樣換?這是根據(jù)[MakeFiles]段中定義的文件類型對應(yīng)的序號(hào)來的??匆幌耓MakeFiles]段,其中 2=.cpp 3=.obj這里的替換后的2和3就是對應(yīng)你工程名的cpp和obj文件,與$.cpp和.obj功能相同。

3=$.exe,O,$B\LCCLNK.EXE /s /SUBSYSTEM WINDOWS,$.obj,$.res

//這條用于連接程序。各條對應(yīng)情況與前面的兩條類似。假設(shè)你象我一樣測試的是E:\RadASM\Lcc\Projects\dialog\dialog 下的dialog工程,$B\LCCLNK.EXE /s /SUBSYSTEMWINDOWS,$.obj,$.res執(zhí)行后效果是這樣:
E:\Lcc\Bin\LCCLNK.EXE /s /SUBSYSTEM WINDOWS "dialog.obj" "dialog.res"
同樣你也可以在具體項(xiàng)目定義中把$.exe對應(yīng)換成5,$.res對應(yīng)換成4。

4=0,0,,$.exe

//這條命令是運(yùn)行編譯好的程序。這里的0,0(注意是數(shù)字0),照抄別的就可以了。只是如果編譯的是控制臺(tái)程序的話,為防止運(yùn)行時(shí)看不到效果,可這樣寫:4=0,0,$D\RunStub,$.exe這里的RunStub.exe是我上次發(fā)現(xiàn)在RadASM中運(yùn)行dos程序看不到效果,就跟RadASM的作者說了一下,他提供的這個(gè)小工具,現(xiàn)在已包含在masm的Projects目錄中了。把它復(fù)制到Addins目錄即可。另外你也可以用LCC的Bin目錄下的一個(gè)rundos.exe小工具,不但支持按任意鍵退出,還可顯示執(zhí)行時(shí)間,推薦??梢栽诳刂婆_(tái)工程中這樣配置:4=0,0,$B\rundos.exe,$.exe

5=rsrc.obj,O,$D\CVTRES.EXE,rsrc.res

//這條命令是用CVTRES.EXE轉(zhuǎn)換.res文件到.obj文件的。我把第三項(xiàng)修改為 $D\CVTRES.EXE 是因?yàn)镃VTRES.EXE是微軟的程序,LCC中沒有。我把這個(gè)程序復(fù)制到了Addins目錄。如果你的Addins目錄中沒有這個(gè)文件的話請把這個(gè)文件從masm32的bin目錄下復(fù)制過來。

6=*.obj,O,$B\LCC.EXE /O /unused /c /errout=error.txt /I"$I",*.cpp

//這條命令是用于編譯模塊的,其中的*.cpp中的“*”只在編譯模塊(module)時(shí)使用。一般可用于編譯你添加的其它源文件。

7=0,0,"$E\OllyDbg",$.exe

//這條命令是用調(diào)試器打開你編譯好的程序。照抄即可。

[Win32 App]
Files=1,1,1,0,0,0,0,0
Folders=1,0,1
MenuMake=1,1,1,1,1,1,1,0,0,0
;x=FileToDelete/CheckExistsOnExit,
;(O)utput/(C)onsole/0,Command,
;MakeFile1[,MakeFile2[,MakeFile3...]]
1=4,O,$D\RC.EXE /v,1
2=3,O,$B\LCC.EXE /O /unused /c /errout=error.txt /I"$I",2
3=5,O,$B\LCCLNK.EXE /s /SUBSYSTEM WINDOWS /o "$5",3,4
4=0,0,,5
5=rsrc.obj,O,$D\CVTRES.EXE,rsrc.res
6=*.obj,O,$B\LCC.EXE /O /unused /c /errout=error.txt /I"$I",*.cpp
7=0,0,"$E\OllyDbg",5
11=4,O,$D\RC.EXE /v,1
12=3,O,$B\LCC.EXE /g2 /O /unused /c /errout=error.txt /I"$I",2
13=5,O,$B\LCCLNK.EXE /SUBSYSTEM WINDOWS /o "$5",3,4
14=0,0,,5
15=rsrc.obj,O,$D\CVTRES.EXE,rsrc.res
16=*.obj,O,$B\LCC.EXE /g2 /O /unused /c /errout=error.txt /I"$I",*.cpp
17=0,0,"$E\OllyDbg",5

//這個(gè)段就是具體工程的配置。[Win32App]就是你在[Project]的Type中定義的工程項(xiàng)目。配置方法可以參照上面的[MakeDefNoProject]段的設(shè)置,再對具體工程進(jìn)行修改。下面的具體各個(gè)段我就不列出來了,具體內(nèi)容可以看一下我漢化的RadASM 2.2.0.5b 中的lcc.ini文件。

[MenuMake]
1=編譯資源腳本(&C),372,M,1
2=編譯(&A),116,M,2
3=連接(&L),1652,M,3
4=構(gòu)建(&B),1396,M,2,3
5=-,0,M,
6=構(gòu)建并運(yùn)行(&G),628,M,2,3,4
7=-,0,M,
8=運(yùn)行(&R),884,M,4
9=在調(diào)試器中運(yùn)行(&D),580,M,7
10=-,0,M,
11=全部構(gòu)建并運(yùn)行(&A),1140,M,1,2,3,4
12=-,0,M,
13=編譯模塊(&M),0,M,6
Ver=100

//這里就是你在RadASM的構(gòu)建菜單上看到的子菜單,可以照抄后修改。其中的如 5=-,0,M, 是在子菜單之間加一條分隔線。

[Color]
...

//這個(gè)段是用于在RadASM中設(shè)置語法高亮及背景色等顏色的,具體內(nèi)容我不列了,可在顏色及關(guān)鍵字選項(xiàng)中設(shè)置。可先照抄一個(gè)再在RadASM中修改。

[KeyWords]
...

//這個(gè)段是設(shè)置語法高亮的關(guān)鍵字。照抄后自己手工修改。也可在RadASM的顏色及關(guān)鍵字選項(xiàng)中設(shè)置。

[ReallyRad]
...

//ReallyRad插件配置,可在ReallyRad插件的選項(xiàng)中修改。照抄。

[RadHelp]
...

//RadHelp插件設(shè)置,用于幫助文件。照抄后自己修改,也可在RadHelp插件中修改。

[MenuMacro]
...

//宏菜單,照抄,可在RadASM的選項(xiàng)中設(shè)置。

  到這里已經(jīng)全部配置完了,現(xiàn)在就是測試。先把配置好的文件(我這里是lcc.ini)放到RadASM目錄下,在RadASM的選項(xiàng)->編程語言中添加一下。再在RadASM的目錄下新建一個(gè)文件夾,我們這里命名為Lcc,按照別的編譯器文件夾的結(jié)構(gòu)依次建立好子文件夾。建好文件夾后在RadASM的選項(xiàng)中把路徑設(shè)置好,現(xiàn)在我們就可以建立一個(gè)工程來測試了。不知大家注意到?jīng)]有,我在編譯選項(xiàng)中是這樣設(shè)置的:$B\LCC.EXE /O/unused /c /errout=error.txt /I"$I" 。這個(gè)/errout=error.txt選項(xiàng)是把出現(xiàn)的錯(cuò)誤和警告寫入到error.txt文件中。原來我是沒添加這個(gè)選項(xiàng)的,但在RadASM中編譯一個(gè)沒有任何錯(cuò)誤的工程時(shí)輸出窗口中的編譯進(jìn)度條一直顯示進(jìn)程,沒法完成。改為控制臺(tái)輸出則可以。但控制臺(tái)輸出的話我將看不到錯(cuò)誤信息,后來加了這個(gè) /errout=error.txt參數(shù)才解決了這個(gè)問題。我這里想說的就是出現(xiàn)問題時(shí)先不要急,再研究研究命令行選項(xiàng),可能就可以解決了。測試中還有一個(gè)問題就是我要是把連接選項(xiàng)設(shè)成這樣:
3=5,O,$B\LCCLNK.EXE /s /SUBSYSTEM WINDOWS /o "$5",3,4
如果我編譯的程序中根本沒有資源的話將會(huì)出錯(cuò)。這樣只好建兩個(gè)項(xiàng)目,一個(gè)是有資源的,一個(gè)是無資源的。有資源的就用上面這條連接選項(xiàng),無資源的用這條連接選項(xiàng):
3=5,O,$B\LCCLNK.EXE /s /SUBSYSTEM WINDOWS /o "$5",3
這樣就行了?,F(xiàn)在沒有錯(cuò)誤的工程我們都編譯成功了,再來測試一下源碼中有錯(cuò)誤的工程編譯時(shí)的情況。我把源程序中這句 return FALSE; 后面的分號(hào)刪掉,變成這樣:return FALSE 再編譯一下,在輸出窗口中顯示錯(cuò)誤如下:
1 error, 0 warnings
Error dialog.cpp: 30 Syntax error; missing semicolon before `}'

好,我在第二行的Error dialog.cpp 上雙擊一下,看看能不能跳到出錯(cuò)的位置。很不幸,出現(xiàn)一個(gè)錯(cuò)誤:“無法打開文件E:\RadASM\Lcc\Projects\dialog\”為什么?沒辦法,請出OllyDBG來調(diào)試一下RadASM。先用spy查找一下輸出窗口的句柄,再在OllyDBG中設(shè)個(gè)203WM_LBUTTONDBLCLK的消息斷點(diǎn)(這個(gè)斷點(diǎn)的意思就是如果在輸出窗口中雙擊鼠標(biāo)左鍵時(shí)中斷),先在RadASM中打開其它編譯器中可以正常跳轉(zhuǎn)到出錯(cuò)行的工程,雙擊輸出窗口中的錯(cuò)誤,被OllyDBG攔下。分析一下,再打開我們自己新建編譯器中的工程,雙擊出錯(cuò)行再進(jìn)行分析。具體分析過程我不寫了,最后得出的結(jié)論是由RadASM目錄下的RAEdit.dll控制錯(cuò)誤跳轉(zhuǎn),它只認(rèn)這種格式的錯(cuò)誤:
dialog.cpp(31) : error C2143: syntax error : missing ';' before '}'
就是說格式為:源文件名(出錯(cuò)行號(hào)):出錯(cuò)信息。而LCC的錯(cuò)誤信息格式為:Error 源文件名: 出錯(cuò)行號(hào) 出錯(cuò)信息
RadASM把前面的 Error作為源文件名,當(dāng)然打不開文件。這時(shí)怎么辦呢?一個(gè)方法就是自己寫一個(gè)插件專門處理新建編譯器的出錯(cuò)信息跳轉(zhuǎn),另一種方法就是給RadASM的作者寫封信,讓他來幫助解決。第一種太煩,我不干,我選第二種。只要讓RadASM的作者修改幾條代碼就行了。另外別忘了把你配置好的文件發(fā)給他(這里要注意把配置文件中的中文都改成英文,編輯器中的選項(xiàng)都改為對應(yīng)英文環(huán)境的,我們也要國際化嘛^_^),讓他集成到RadASM中去。

提示:根據(jù) RadASM 的最新版本 2.2.0.6 的說明,現(xiàn)在可以把 1=4,O,$D\RC.EXE /v,1 這樣的編譯配置改為 1=4,O,$B\LRC.EXE /v,1,作者在對話框編輯器中提供了一個(gè)選項(xiàng)“限定字體信息”可以保證用 LRC.EXE 編譯的資源字體顯示正常。2.2.0.6版已完全支持 LCC。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MS CL & LINK的命令行用法
MASM32新手指南|中文方案文檔站(www.cn
cl.exe link.exe用法詳解
VS中的 MD/MT設(shè)置
深入探究VC
按類別列出的編譯器選項(xiàng) | Microsoft Docs
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服