天天看點

Linux系統下C++開發工具

轉載:http://www.bitscn.com/os/linuxbc/200904/158755.html

概述

    就C++開發工具而言,與Windows下微軟(VC, VS2005等)一統天下相比,Linux/Unix下C++開發,可謂五花八門,各式各樣。Emacs, vi, eclipse, anjuta,kdevelop等層出不窮。

    Windows下,開發工具多以內建開發環境IDE的形式展現給最終使用者。例如,VS2005內建了編輯器,宏彙編ml,C /C++編譯器cl,資源編譯器rc,調試器,文檔生成工具, nmake。它們以內建方式提供給最終使用者,對于初學者而言十分友善。但是,這種商業模式,直接導緻使用者可定制性差,不利于自動化,內建第三方工具的能力 弱。例如,無法定制一些宏來處理一些重複操作;體會不到自動化makefile一步到位快感;無法遠端登入到伺服器上進行開發;無法使用某種”粘合劑”來 把第三方工具(例如,文本工具,字元串工具)有效地調用起來。可以說,良好的商業支援和傻瓜式開發,是它們主要的優點。

    在linux下,開發工具被切割成一個個獨立的小工具,各自處理不同的問題。

例如,編輯器(emacs, vim)用來進行編輯程式的,調試器(gdb)用來調試程式,編譯器(GCC)用來編譯和連結程式的,性能分析工具(gcov, gprof)用來優化程式的,文檔生成器(doxygen)用來生成文檔的。

同時,還有一些系統工具和系統知識,我們是很有必要了解的:程式自動化機制 makefile,系統粘合劑shell,系統查找工具grep, locate, find。其它的工具(例如ctags, OCI公司的MPC等等),一旦熟練掌握,它們将成為你手中的利器。

    本文主要是一些針對LINUX下開發工具使用的經驗之談。由于,工具品種繁多,我們沒有能力也沒有必要一一介紹。對于LINUX下IDE工具,例如 eclipse, anjuta等,它們雖然也很實用,但是使用起來比較簡單,而且目前還算不上主流。是以,它們将不被着重介紹。同時,本文也不打算寫成各個工具的操作手 冊,隻着眼于介紹各個工具的想要解決的問題、運作機理和主要特性。

正文

    編輯器

    要進行開發,第一件事情就是選擇一個合适的編輯器。編輯器選擇有幾個要素:

    1)減少不必要的編輯動作,減少編輯的時間。

    一切能夠無二義性描述出來的編輯任務,都可以而且應該能被自動化。例如,每一個C++程式都會有一個main函數;我們在定義.h檔案時,都希望加入一些 預處理指令#define來幫我們解決重複引用同一個頭檔案而帶來的麻煩。滑鼠操作總是比鍵盤操作要慢的。這方面EMACS做得可算是到了極緻。是以, EMACS使用者經常會吹噓:他們編輯的速度等同于他們思考的速度。

    2)可擴充性高。

    程式員預期的編輯器應該能提供一些程式設計的幫助,例如,文法高亮,自動補齊,自動排版,文法檢查等等。留心觀察一下gedit, vim, emacs, ultraEdit,就會發現它們提供的遠不是windows 記事本,寫字闆提供的那麼簡陋的功能。對于一種新的語言,新的文法,它們應該能很友善地提供支援,而不停留在一種或幾種固定的語言上。

    3)使用者可定制性高。

    如果想長期從事研發, 特别是linux/unix下研發的話,那麼你很有必要學好一個功能足夠的編輯器。有這麼一句話:Linux下程式員分為三種,使用emacs的,使用vi的,還有其它。

    EMACS是Stallman用lisp語言寫的一個GPL的編輯器。我們這裡所說的emacs指的是GNU emacs,而非Xemacs。由于它的開放性,我們可以把它打造成一個功能強大的IDE。我們在安裝好CGYwin之後,也可以在Windows系統下 使用 EMACS。CGYwin和MINGW是第三方寫的一個在Windows系統上模拟POSIX系統的工具。

    EMACS與其說的是一個編輯器,倒不如說它是一個作業系統。我們可以用它來寫程式設計,寫wiki,收發郵件等等。EMACS主要是通過兩種方式來進行擴 展:el腳本(elisp是lisp的一種方言)和第三方擴充包。EMACS的入門成本很高。由于是 純鍵盤操作,是以需要記憶大量的快捷鍵;功能強大是通 過使用者添加一些擴充包,lisp腳本來實作的。如何正确配置和修改是很需要耐心和技巧的。

    編譯器

   編譯器首選 GCC(GNU COMPILER COLLECTION)。原因有兩個,它是GNU開源的,同時它對标準C++的支援度高達96.15%。而VC++6.0的支援度隻有83.43%。 GCC不僅是通常意義上的C或C++的編譯器,它還可以編譯java等其它語言。gcc是gnuc的編譯器,g++是gnu c++的編譯器, 而EGCS(Enhanced GNU Compiler Suite)可以認為是gcc的改進版。

    編譯語言從源程式到目标代碼會經過如下幾個階段:源程式->彙程式設計式->編譯成obj程式->連結成最終可執行程式。我們可以通過一條編譯指令來完 成所有步驟。也可以分步執行。 gcc有三個重要選項-E(隻進行預處理), -S(生成彙編代碼), -g(生成帶原代碼調試符号的可執行檔案,如果想用gdb調試的話,就應該在編譯時打開這個選項)。

    GCC可以看作一個軟體包,除了編譯工具,它還內建了調試器gdb,性能分析工具gcov, gprof。隻要我們裝好了GCC,這些強大工具就可以直接使用了。

   通過gcov,我們可以檢視一個程式,源代碼中每行代碼的運作次數。我們優化運作次數最多的代碼,那麼就可以大大優化程式。使用gcov時,需要打開 GCC的fprofile-arcs和ftest-coverage兩個選項。gcov中常用的選項有-b分支統計資訊。

    通過gprof工具,我們可以檢視函數之間的調用順序,及各個函數運作的時間。我們可以将gprof了解為linux/unix自帶工具time的加強版。使用gprof時,需要打開GCC的pg選項。

    gcov和 gprof的共同點是在編譯程式時,加入自己的一些輔助資訊,由此來進行程式診斷。除了,這些優化手段,我們還可以使用一些記憶體洩漏工具,來減少野指針,未釋放的記憶體空間。

繼續閱讀