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

打開APP
userphoto
未登錄

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

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

聯(lián)系客服