欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Linux下C++開(kāi)發(fā)工具介紹
發(fā)布者:chinaitlab  日期: 2010-01-29 00:00:00
概述
就C++開(kāi)發(fā)工具而言,與Windows下微軟(VC, VS2005等)一統天下相比,Linux/Unix下C++開(kāi)發(fā),可謂五花八門(mén),各式各樣。Emacs, vi, eclipse, anjuta,kdevelop等層出不窮。
Windows下,開(kāi)發(fā)工具多以集成開(kāi)發(fā)環(huán)境IDE的形式展現給最終用戶(hù)。例如,VS2005集成了編輯器,宏匯編ml,C /C++編譯器cl,資源編譯器rc,調試器,文檔生成工具, nmake。它們以集成方式提供給最終用戶(hù),對于初學(xué)者而言十分方便。但是,這種商業(yè)模式,直接導致用戶(hù)可定制性差,不利于自動(dòng)化,集成第三方工具的能力弱。例如,無(wú)法定制一些宏來(lái)處理一些重復操作;體會(huì )不到自動(dòng)化makefile一步到位快感;無(wú)法遠程登錄到服務(wù)器上進(jìn)行開(kāi)發(fā);無(wú)法使用某種”粘合劑”來(lái)把第三方工具(例如,文本工具,字符串工具)有效地調用起來(lái)??梢哉f(shuō),良好的商業(yè)支持和傻瓜式開(kāi)發(fā),是它們主要的優(yōu)點(diǎn)。
在linux下,開(kāi)發(fā)工具被切割成一個(gè)個(gè)獨立的小工具。各自處理不同的問(wèn)題。例如,編輯器(emacs, vim)用來(lái)進(jìn)行編輯程序的,調試器(gdb)用來(lái)調試程序,編譯器(GCC)用來(lái)編譯和鏈接程序的,性能分析工具(gcov, gprof)用來(lái)優(yōu)化程序的,文檔生成器(doxygen)用來(lái)生成文檔的。同時(shí),還有一些系統工具和系統知識,我們是很有必要了解的:程序自動(dòng)化機制 makefile,系統粘合劑shell,系統查找工具grep, locate, find。其它的工具(例如ctags, OCI公司的MPC等等),一旦熟練掌握,它們將成為你手中的利器。
本文主要是一些針對LINUX下開(kāi)發(fā)工具使用的經(jīng)驗之談。由于,工具品種繁多,我們沒(méi)有能力也沒(méi)有必要一一介紹。對于LINUX下IDE工具,例如 eclipse, anjuta等,它們雖然也很實(shí)用,但是使用起來(lái)比較簡(jiǎn)單,而且目前還算不上主流。所以,它們將不被著(zhù)重介紹。同時(shí),本文也不打算寫(xiě)成各個(gè)工具的操作手冊,只著(zhù)眼于介紹各個(gè)工具的想要解決的問(wèn)題、運行機理和主要特性。
正文
編輯器
要進(jìn)行開(kāi)發(fā),第一件事情就是選擇一個(gè)合適的編輯器。編輯器選擇有幾個(gè)要素:
1)減少不必要的編輯動(dòng)作,減少編輯的時(shí)間。
一切能夠無(wú)二義性描述出來(lái)的編輯任務(wù),都可以而且應該能被自動(dòng)化。例如,每一個(gè)C++程序都會(huì )有一個(gè)main函數;我們在定義.h文件時(shí),都希望加入一些預處理指令#define來(lái)幫我們解決重復引用同一個(gè)頭文件而帶來(lái)的麻煩。鼠標操作總是比鍵盤(pán)操作要慢的。這方面EMACS做得可算是到了極致。所以, EMACS用戶(hù)經(jīng)常會(huì )吹噓:他們編輯的速度等同于他們思考的速度。
2)可擴展性高。
程序員預期的編輯器應該能提供一些編程的幫助,例如,語(yǔ)法高亮,自動(dòng)補齊,自動(dòng)排版,語(yǔ)法檢查等等。留心觀(guān)察一下gedit, vim, emacs, ultraEdit,就會(huì )發(fā)現它們提供的遠不是windows 記事本,寫(xiě)字板提供的那么簡(jiǎn)陋的功能。對于一種新的語(yǔ)言,新的語(yǔ)法,它們應該能很方便地提供支持,而不停留在一種或幾種固定的語(yǔ)言上。
3)用戶(hù)可定制性高。
如果想長(cháng)期從事研發(fā), 特別是linux/unix下研發(fā)的話(huà),那么你很有必要學(xué)好一個(gè)功能足夠的編輯器。有這么一句話(huà):Linux下程序員分為三種,使用emacs的,使用vi的,還有其它。
EMACS是Stallman用lisp語(yǔ)言寫(xiě)的一個(gè)GPL的編輯器。我們這里所說(shuō)的emacs指的是GNU emacs,而非Xemacs。由于它的開(kāi)放性,我們可以把它打造成一個(gè)功能強大的IDE。我們在安裝好CGYwin之后,也可以在Windows系統下使用 EMACS。CGYwin和MINGW是第三方寫(xiě)的一個(gè)在Windows系統上模擬POSIX系統的工具。
EMACS與其說(shuō)的是一個(gè)編輯器,倒不如說(shuō)它是一個(gè)操作系統。我們可以用它來(lái)寫(xiě)編程,寫(xiě)wiki,收發(fā)郵件等等。EMACS主要是通過(guò)兩種方式來(lái)進(jìn)行擴展:el腳本(elisp是lisp的一種方言)和第三方擴展包。EMACS的入門(mén)成本很高。由于是純鍵盤(pán)操作,所以需要記憶大量的快捷鍵;功能強大是通過(guò)用戶(hù)添加一些擴展包,lisp腳本來(lái)實(shí)現的。如何正確配置和修改是很需要耐心和技巧的。
編譯器
編譯器首選GCC(GNU COMPILER COLLECTION)。原因有兩個(gè),它是GNU開(kāi)源的,同時(shí)它對標準C++的支持度高達96.15%。而VC++6.0的支持度只有83.43%。 GCC不僅是通常意義上的C或C++的編譯器,它還可以編譯java等其它語(yǔ)言。gcc是gnu c的編譯器,g++是gnu c++的編譯器, 而EGCS(Enhanced GNU Compiler Suite)可以認為是gcc的改進(jìn)版。
編譯語(yǔ)言從源程序到目標代碼會(huì )經(jīng)過(guò)如下幾個(gè)階段:源程序->匯編程序->編譯成obj程序->鏈接成最終可執行程序。我們可以通過(guò)一條編譯指令來(lái)完成所有步驟。也可以分步執行。gcc有三個(gè)重要選項-E(只進(jìn)行預處理), -S(生成匯編代碼), -g(生成帶原代碼調試符號的可執行文件,如果想用gdb調試的話(huà),就應該在編譯時(shí)打開(kāi)這個(gè)選項)。
GCC可以看作一個(gè)軟件包,除了編譯工具,它還集成了調試器gdb,性能分析工具gcov, gprof。只要我們裝好了GCC,這些強大工具就可以直接使用了。
通過(guò)gcov,我們可以查看一個(gè)程序,源代碼中每行代碼的運行次數。我們優(yōu)化運行次數最多的代碼,那么就可以大大優(yōu)化程序。使用gcov時(shí),需要打開(kāi) GCC的fprofile-arcs和ftest-coverage兩個(gè)選項。gcov中常用的選項有-b分支統計信息。
通過(guò)gprof工具,我們可以查看函數之間的調用順序,及各個(gè)函數運行的時(shí)間。我們可以將gprof理解為linux/unix自帶工具time的加強版。使用gprof時(shí),需要打開(kāi)GCC的pg選項。
gcov和 gprof的共同點(diǎn)是在編譯程序時(shí),加入自己的一些輔助信息,由此來(lái)進(jìn)行程序診斷。除了,這些優(yōu)化手段,我們還可以使用一些內存泄漏工具,來(lái)減少野指針,未釋放的內存空間。
調試器
GDB即GNU的調試器,它是GCC附帶的一個(gè)性能優(yōu)質(zhì)的調試器。通過(guò)GDB和腳本結合,我們可以很好的實(shí)現回歸測試。
GDB可以運行于CLI和GUI兩種模式。默認GDB是CLI模式的,我們可以去下載和安裝GUI模式的GDB,例如xxgdb, ddd等。一個(gè)更好的方式是在 EMACS中使用GDB。GDB包括visual studio工具的所有調試功能,還包括它沒(méi)有的功能。它除了支持,我們一般的設置斷點(diǎn),單步跟蹤,step in, step out, step over等,還有一些強大的功能。在gdb中,我們可以有以下幾種暫停方式:斷點(diǎn)(BreakPoint)、觀(guān)察點(diǎn)(WatchPoint)、捕捉點(diǎn)(CatchPoint)、信號(Signals)、線(xiàn)程停止(Thread Stops)。
下面列舉幾個(gè)讓我印象深刻的功能。1)通過(guò) watch指令,可以讓程序在某個(gè)變量的值發(fā)生變化時(shí),暫停下來(lái)。2)通過(guò)print指令,在程序運行時(shí),設置變量的值,運行一個(gè)程序自身支持的一個(gè)方法。3)通過(guò)until指令,我們可以讓程序在運行到某個(gè)程序時(shí)暫停下來(lái)。4)通過(guò)break.. if指令,使得程序在滿(mǎn)足某個(gè)bool表達式時(shí),暫停下來(lái)。
粘合劑
我想通過(guò)“粘合劑”這個(gè)詞來(lái)表達將多個(gè)工具粘合起來(lái)的“膠水”。例如,通過(guò)shell腳本,我們可以把OS命令,sed指令,awk指令,其它腳本文件等串聯(lián)起來(lái),發(fā)揮它們的合力。在linux C++編程中,我們不可避免地會(huì )使用makefile文件。通過(guò),它我們可以把編譯指令,生成文檔操作,清除操作等等串聯(lián)起來(lái)。從某種意義上來(lái)看,它也相當于一個(gè)粘合劑。
makefile的出發(fā)點(diǎn)是,維護好一個(gè)項目中眾多文件的依賴(lài)關(guān)系,由此得到一個(gè)源程序的拓撲圖。當我們只修改圖中某個(gè)結點(diǎn)時(shí),重新編譯時(shí)就只需要將拓撲圖中關(guān)聯(lián)的鏈路進(jìn)行編譯就好了。由此,大大縮短了編譯的時(shí)間。make有兩大概念:dependencies和rules。規則rule即針對每一個(gè)依賴(lài)關(guān)系 dependency定義一個(gè)操作規則。這個(gè)細粒度的分離,就可以使我們可以定制軟件構建的行為。例如,修改使用的編譯器,修改includepath, 修改libpath, 修改編譯選項等等。我們常見(jiàn)的VC中的nmake,功能和make是類(lèi)似的。
make使用的重點(diǎn)和難點(diǎn)是編寫(xiě)Makefile文件。Makefile的語(yǔ)法相對其它語(yǔ)言來(lái)說(shuō)是很不一樣的,我們要特別注意TAB鍵和空格鍵的區別。有很多工具可以用來(lái)幫助我們生成Makefile。最出名的就是GNU的autoconf了。一個(gè)GNU程序的編寫(xiě),需要autoscan, aclocal, autoconf, automake這四個(gè)工具。
我們知道GNU軟件安裝的三步曲是:./configure, make, make install。其中./configure就是根據autoconf, alocal等工具生成一個(gè)makefile文件。make指令就是調用make指令來(lái)根據makefile文件的規則來(lái)編譯源程序。而make install就是執行makefile中的install規則指出的操作(一般是copy操作)。而make clean就是執行makefile中的clean規則指出的操作(一般是rm操作)。我們用Eclispe+CDT開(kāi)發(fā)Managed C++ Project時(shí),它就是通過(guò)objects.mk,subdir.mk,sources.mk三個(gè)文件來(lái)生成Makefile。我們注意觀(guān)察編譯時(shí)的輸出信息,就可以看到顯示的Makefile文件的內容。
可以說(shuō),如果想編譯出跨平臺的C++程序,那么makefile是一種最方便的機制。
OCI公司為Douglas C.Schmidt的ACE,TAO開(kāi)源社區編寫(xiě)了一段偉大的perl腳本--MPC。它由平臺信息,一個(gè)規則文件,源代碼,生成用戶(hù)想要的工程文件,例如Make, Nmake, Visual C++ 6, Visual C++ 7等等。Google Web Tookit, Celtix做的事情與之類(lèi)似,不過(guò)它們是針對JAVA的,而MPC是針對C++的。
結束語(yǔ)
國內資料太多的低層次的重復,經(jīng)常是一個(gè)網(wǎng)頁(yè)被多次轉載,而且回答問(wèn)題時(shí)深度不夠。個(gè)人找資料的順序是:查看quick start或how to文檔->自帶的幫助(如果看起來(lái)不太吃力話(huà))->百度查一下中文網(wǎng)頁(yè),來(lái)理清一下基本概念->google查一下->幾個(gè)大的,相關(guān)的網(wǎng)站查下資料->看自帶幫助。再者,面對面的交流是十分重要的,大家可以相互理一下概念,交流一下心得??上?,我身邊這種氛圍還是不夠。
Linux下開(kāi)發(fā)還可以更友好一些。個(gè)人感覺(jué), linux開(kāi)發(fā)要在國內普通程序員中大規模普及,還有一段很長(cháng)的路要走。ubuntu火爆的主要原因,就是它幫用戶(hù)搭好一些默認配置。用戶(hù)如果想新加一些服務(wù),它們提供了良好,有效地支持。所以,我想我們可以在IDE和現在linux這種一個(gè)個(gè)小部件的這兩種狀態(tài)之間,取一個(gè)折衷。也就是針對幾種主要需求的用戶(hù),發(fā)布一些配置好的環(huán)境。尤其是emacs的各種el腳本(例如界面主題的color-theme, C/C++語(yǔ)言編輯策略,代碼樣式設置腳本,各種emacs系統設置), 第三方擴展包(模板template, 編程支持包c(diǎn)edet等)。每一個(gè)用戶(hù)浪費時(shí)間來(lái)進(jìn)行這些配置是十分沒(méi)有意義的!工具始終只是工具,我們不能淪為工具的奴隸,不能把一大部分精力浪費在配置工具上。
值得注意的是現在方興未艾的eclipse有向這方面邁進(jìn)的趨勢。但是,現在emacs已經(jīng)做得很好了,ecilpse能否超越它,我們還有待觀(guān)察。我們可以通過(guò)在eclipse上安裝SDT插件來(lái)進(jìn)行C++開(kāi)發(fā)。但是,它目前還不支持調試功能,而且不太穩定,功能不夠強。例如,有時(shí)會(huì )無(wú)故死掉;如果想通過(guò)eclipse來(lái)轉向函數原型的話(huà),那么迎接你的將是一個(gè)漫長(cháng)、焦急的等待。
由于本人缺少在linux下進(jìn)行實(shí)際大規模程序的開(kāi)發(fā)經(jīng)驗,對很多工具和機制的理解還比較膚淺。對它們的熟悉程度離真正實(shí)用,還有一段很長(cháng)的路要走。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
學(xué)習C++編程的必備軟件
C++ IDE for Linux
我的Linux PC開(kāi)發(fā)環(huán)境
Linux調試工具
GNU 編譯器組合(MSP430)
Powerful Programs
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久