最近業(yè)余時(shí)間在玩下ARM7, 使用Keil uVision集成開(kāi)發(fā)環(huán)境, 有時(shí)真的受不了, 編輯器的代碼提示/高亮功能幾乎為0, 代碼基本是要一個(gè)一個(gè)字母往里敲! 想想在的VS, Eclipse等下開(kāi)發(fā)多舒服, 都什么年代了, Keil竟然還不升級(jí)下它的代碼編輯器!
后來(lái)發(fā)現(xiàn)MDK里有個(gè)Eclipse插件, 想想以后可以在Eclipse for C/C++下寫(xiě)代碼了--狂喜. 于是, 趕緊安裝....我暈, 真是坑爹啊, 這插件只能導(dǎo)入/調(diào)試Keil MDK工程, 沒(méi)看到哪里可以編譯啊? ...看了下此插件的說(shuō)明文檔, 確實(shí)是沒(méi)有提到如何在Eclipse下建立/編譯MDK工程, 確認(rèn)已被坑...
還沒(méi)心死, 到網(wǎng)上找呀找, 找呀找, 有人說(shuō)要用Windows下的交叉編譯器, 看了一下, 看不懂, 很煩...無(wú)果. 自己又折騰了下, 使用Makefile+Keil MDK自帶的編譯器可以, 但使用Eclipse CDT自動(dòng)產(chǎn)生的Makefile文件又不行, Keil MDK編譯器很多選項(xiàng)都不支持...總不能要我每次都自己寫(xiě)Makefile吧? 對(duì)Makefile又不熟, 不爽啊...
無(wú)路可走了, 為了使以后寫(xiě)代碼輕松點(diǎn), 決定自己寫(xiě)一個(gè)Eclipse編譯輔助工具--KeilBuilder. 它實(shí)現(xiàn)的功能是: 搜索工程目錄里的所有源文件, 然后調(diào)用Keil MDK自帶的編譯器, 鏈接器等編譯工程, 最后生成期望的Hex文件. 然后再用Eclipse插件下載或調(diào)試. 試了一下, 效果不錯(cuò). 如下圖: (注: 誰(shuí)有更好的方法請(qǐng)分享下吧...)
下面的此工具在Eclipse下的具體使用方法:
1. 把KeilBuilder.exe復(fù)制到MDK的編譯器目錄下, 一般為: C:\Keil\ARM\BIN40下, 這要看你的MDK安裝在哪了.
2. 新建一個(gè)C Project 工程, 并選擇Cross GCC交叉編譯工具為本工程編譯工具.
.通過(guò)菜單File -> new -> C Project 新建一個(gè)空的C工程. 在彈出的對(duì)話框中如下圖, 注意要選擇"Cross GCC"工具鏈:
 3. 為新建的工程導(dǎo)入Keil工程或僅導(dǎo)入源文件. 如下圖: 
4. 設(shè)置Eclipse工程交叉編譯環(huán)境.
.在左邊的"Porject Explorer"窗口內(nèi)鼠標(biāo)右鍵單擊工程名, 選擇最后的菜單項(xiàng)"Properties"項(xiàng).
.在C/C++ Build -> Settings界面中, 設(shè)置"Configuration"為"[ All configurations ]"; 設(shè)置"Cross Setttings"的"Path"即交叉工具鏈路徑為KeilBuilder所有的目錄, 如C:\Keil\ARM\BIN40. 如下圖: .在"Cross GCC Compiler"的"Command"下填入"KeilBuilder -no", 表示什么也不做; 另外的"Cross GCC Linker"及"Cross GCC Assembler"的"Command"中也設(shè)置為同值. 此設(shè)置為防Eclipse對(duì)不存在的GCC工具的報(bào)警, 如下圖:
.在C/C++ Build 界面中, Builder Settings 中去掉"Use default build command"上的勾, 并在"Build command"中填入"KeilBuilder.exe -d xxxx -e". 基中xxx為工程根目錄路徑, "-d"表示設(shè)置KeilBuilder的工程路徑, "-e"表示在編譯時(shí)自動(dòng)對(duì)Eclipse工程進(jìn)行設(shè)置, 目前僅設(shè)置"C/C++ Build" -> "Settings" -> "Cross GCC Compiler" -> “Symbols”和”Includes”以及”Cross GCC Assmebler” -> “General”項(xiàng). 如下圖:
.在C/C++ Build 界面中的"Behaviour"選項(xiàng)卡中, 在"Build(Incremental build)"中填入"-s"表示安靜編譯; 在"Clean"中填入"-c"表示清理工程. 如下圖:
.在C/C++ Build 中的 "Discovery Options" 中去掉 "Enable generate scanner info command"選項(xiàng). 如下圖:
.不用設(shè)置預(yù)編譯宏或者Includes選項(xiàng), 因?yàn)镵eilBuilder會(huì)自動(dòng)幫忙加進(jìn)去. 所以, 有時(shí)候你看到代碼還有一大堆的錯(cuò)誤時(shí), 編譯一次后, 刷新工程(右鍵工程名 -> "Refresh")就木有錯(cuò)誤鳥(niǎo).
5. 到此, 可以編譯你的工程了. 通過(guò)菜單項(xiàng)"Project" -> "Build All"編譯工程, 或"Project" -> "Clean..."清理工程. 編譯不通過(guò)或得到不正確Hex文件的繼續(xù)往下看.如下圖:
6. 在Eclipse中添加一個(gè)外部工具, 這樣可以通過(guò)Eclipse菜單項(xiàng)運(yùn)行KeilBuilder, 方便.
.在Eclipse菜單中選擇Run -> External Tools -> External Tools Configurations...
.在彈出的對(duì)話框中雙擊"Program" 增加一個(gè)外部工具.
.在Name中填入"KeilBuilder".
.在"Main"選項(xiàng)卡中, Location通過(guò)"Browse File System..." 選擇KeilBuilder程序, 如: C:\Keil\ARM\BIN40\KeilBuilder.exe; 在Working Directory中填入KeilBuilder所在的目錄, 如C:\Keil\ARM\BIN40.
.在"Build"選項(xiàng)卡中, 去掉"Build before launch"上的勾.
.最后單擊"Apply" -> "Run"完成添加, 并運(yùn)行KeilBuilder工具.
此后你就可以通過(guò)菜單Run -> External Tools -> KeilBuilder 來(lái)快速運(yùn)行KeilBuilder工具了. 如下2圖:
7. 經(jīng)過(guò)前面4步的設(shè)置, 你的工程編譯很可能會(huì)編譯不通過(guò), 或者編譯出來(lái)的Hex文件下載不正確. 那是因?yàn)橐恍┚幾g器/鏈接器選項(xiàng)你還沒(méi)有配置. 這時(shí), 你可以通過(guò)菜單Run -> External Tools -> KeilBuilder來(lái)運(yùn)行KeilBuilder工具, 通過(guò)界面來(lái)設(shè)置這些參數(shù). 或者也可以直接用記事本打開(kāi)工程目錄中的"cts.ini"(如果工程目錄中不存在此文件, 請(qǐng)轉(zhuǎn)到KeilBuilder所在的目錄下的"cts.ini", 如果KeilBuilder所在目錄下也沒(méi)有, 那么請(qǐng)雙擊運(yùn)行下KeilBuilder程序, "cts.ini"就會(huì)自動(dòng)生成)對(duì)參數(shù)進(jìn)行修改.
注意, 在KeilBuilder界面上設(shè)置參數(shù)時(shí), 必須選擇好自己的工程目錄, 如果沒(méi)有選擇工程目錄, 設(shè)置的結(jié)果會(huì)保存到KeilBuilder所在的目錄下的"cts.ini"文件中. KeilBuilder在首次運(yùn)行時(shí), 會(huì)在其所在目錄下生成cts.ini文件并設(shè)置參數(shù)為默認(rèn)值. KeilBuilder在每次編譯一個(gè)工程時(shí), 如果該工程目錄下發(fā)現(xiàn)"cts.ini", 就使用工程目錄下的"cts.ini"; 如果沒(méi)有發(fā)現(xiàn)"cts.ini"文件, 則把KeilBuilder所在目錄下的"cts.ini"文件復(fù)制一份到工程目錄下, 然后再編譯.
關(guān)于"cts.ini"文件中的這些參數(shù), 它對(duì)應(yīng)于Keil MDK環(huán)境中的ASM編譯器/C編譯器/Linker選項(xiàng). 因?yàn)闀r(shí)間問(wèn)題, 在KeilBuilder中并未實(shí)現(xiàn)(以后有空再搞吧)類似于Keil uVision中的選項(xiàng)式配置. 如果熟悉這些參數(shù)最好, 不熟的話可以先在Keil uVision中配置好, 再對(duì)應(yīng)添加到"cts.ini"中.
在"cts.ini"文件中的"ASM=" 后面的內(nèi)容對(duì)應(yīng)于Keil uVision工程選項(xiàng)中的"Asm"選項(xiàng).
在"cts.ini"文件中的"CC=" 后面的內(nèi)容對(duì)應(yīng)于Keil uVision工程選項(xiàng)中的"C/C++"選項(xiàng).
在"cts.ini"文件中的"LNK=" 后面的內(nèi)容對(duì)應(yīng)于Keil uVision工程選項(xiàng)中的"Linker"選項(xiàng).
8. 設(shè)置"cts.ini"文件中的編譯選項(xiàng)確實(shí)不是一般人能搞定. 我也不懂(誰(shuí)懂的做個(gè)說(shuō)明分享下吧, 可以的話還能集成為UI, 更方便). 因?yàn)槿藨? 不想去深究這些編譯(鏈接)器選項(xiàng), 于是想到了個(gè)折中的辦法: 通過(guò)Keil uVision來(lái)設(shè)置好這些參數(shù)并編譯工程, 然后把它實(shí)時(shí)的編譯選項(xiàng)顯示出來(lái)以供參考! 這樣當(dāng)編譯選項(xiàng)無(wú)法搞定時(shí), 就把整個(gè)工程交給keil uVision來(lái)編譯一次, 然后參考實(shí)時(shí)獲取的參數(shù)再對(duì)Eclipse工程的"cts.ini"文件做相應(yīng)的修改就OK了.
在keil uVision中捕獲它的編譯選項(xiàng), 需要做如下的設(shè)置. 在工程屬性"Options for Target xxxx"的"User"選項(xiàng)卡中 設(shè)置keil編譯后運(yùn)行”KeilBuilder.exe -p”. 表示捕獲keil uVision編譯選項(xiàng), 如下圖:
下圖為KeilBuiler捕獲到的Keil uVision工程編譯/鏈接參數(shù): 9. 不多說(shuō)了, 編譯, 下載, 調(diào)試. 關(guān)于如何使用MDK Plugin for Eclipse 請(qǐng)參數(shù)它的幫助文檔吧. 祝愉快!
最后希望多多交流.
|