C++開發工具和庫

希望採用的有CPPUNIT、log4cxx

工具包括:gcov、gprof、valgrind、splint(貌似只能用於C)

希望以後堅持使用!!

 

http://blog.csdn.net/uestc_huan/archive/2008/10/23/3126651.aspx

 

在項目開發中,藉助一定的軟件工具,可以大大提高工作效率,方便項目管理和團隊合作。

這裏介紹幾個軟件,一個合格的C++程序員應該瞭解和掌握這些工具。

1)dialogblocks: 很棒的界面開發工具,跟wxwidgets和wxpython可以很好的配合。AUI模式可以做出很炫的界面。基於sizer的界面佈局。畫好界面以後,直接轉化成C++代碼。

2)Enterprise Architect: UML的畫圖工具,可以直接轉化成java和C++的代碼。

3)Vassistant: VC程序員的傑出外掛。大大方便VC的開發。

4)doxygen : 文檔生成工具。按照它要求的格式編寫代碼的註釋,回頭直接可以生成代碼的文檔。

5)cppunit: C++下的單元測試庫。簡單好用。在做迴歸測試的時候,非常有用。對於提高軟件產品質量非常有用。

6)p4或者cvs:軟件版本控制。我就不明白,當初在學校做項目的時候,爲什麼連版本控制系統都沒有引進來。當初真是無知幼稚。

 

下面會轉載一篇文章,對於C++程序員是很棒的宏觀介紹。

 

想了解C++的所有開發庫嗎?請看下文:

[轉]C++開源跨平臺類庫 
-----------------------------------------------------------------------------------------
概要:
-----------------------------------------------------------------------------------------

 在如下的庫支持下,開發的系統可以很方便移植到當前大部分平臺上運行
而無需改動,只需在對應的平臺下 用你喜歡的編譯器 重新編譯即可 

經典的C++庫
  STLport-------SGI STL庫的跨平臺可移植版本,在以前有些編譯器離符合
        標準比較遠的情況下 那時還是有用的,當然目前vc71已經比較接近標準了,
        故目前不怎麼用它了。
  Boost---------準標準庫, 功能強大 涉及能想的到的大部分非特別領域的算法,
        有一個大的C++社區支持
  WxWindows-----功能強大的跨平臺GUI庫  ,它的功能和結構都類似 MFC,故原則上
     可以通過WxWindows把現有MFC程序移植到非Win平臺下
  Blitz---------高效率的數值計算函數庫 ,你可以訂製補充你需要的算法
  Log4cpp-------日誌處理  ,功能類似java中的log4j
  ACE-----------自適應通訊環境, 重量級的通訊環境庫。
  Crypto++ -----加/解密算法庫, 非常專業的C++ 密碼學函式庫
  CppUnit  ---  一個c++的單元測試框架  類似 java  的JUnit 
  Loki -------  一個實驗性質的庫,嘗試把類似設計模式這樣思想層面的東西通過
       庫來提供,他是C++的一個模板庫,系C++"貴族", 它把C++模板的功能發揮到了極致

學術性的C++庫: 
  FC++ --------The Functional C++ Library  ,用庫來擴充語言的一個代表作 ,模板庫
  CGAL ------- Computational Geometry Algorithms Library計算幾何方面的大部分重要的
    解決方案和方法以C++庫的形式提供給工業和學術界的用戶。


其它目前我感覺還不是很爽的C++庫:  
  Doxygen  ----註釋文檔生成工具 ,可恨的是 我找不到 windows版本
  QT ----------大名頂頂的一個多平臺的C++圖形用戶界面應用程序框架(GUI庫)
         可氣的是他的 Windows版 是商業發佈的要付費
  xml4c--------IBM開發的XML Parser,系超重量級的, 適用大型應用中, 其DLL有 12M,恐怖吧
  Xerces c++ --Apache的XML項目, 但 只支持少數的字符編碼,如ASCII,UTF-8,UTF-16等,
          不能處理包含中文字符的XML文檔
  XMLBooster -----  也是一種  XML的 解析工具
  Fox   -------又一種開放源代碼(C++)的GUI庫,功能不是很強


C++開發環境(Win平臺下除了 Visual C++ 和 Borland C++以外的):
  Cygwin  --------Windows下的一個Unix仿真環境
  MinGW   --------GCC的一個Windows移植版本
  Dev C++ -------- 一個C/C++ 的集成開發環境,在Windows上的C++編譯器一直和標準有着一
       段距離的時候,GCC就是一個讓Windows下開發者流口水的編譯器。
  Eclipse-CDT  ----IMB 開發的一個集成開發環境,一般用來作爲Java 開發環境,但由於
        Eclipse 是通過插件體系來擴展功能,這裏我們 安裝 CDT插件後,就可以用來作爲
        C++ 的集成開發環境


-----------------------------------------------------------------------------------------
經典的C++庫
-----------------------------------------------------------------------------------------
以下以 vc71環境 爲例,其他環境 見各軟件包的說明文檔。

1.  STLport (SGI STL庫的跨平臺可移植版本。) 
   -------http://www.stlport.org


vc71環境中編譯安裝
版本:STLport-4.6.2.tar.gz
copy vc71.mak makefile
nmake clean all

頭文件在 %STLport_root%/include/stlport
庫文件在 %STLport_root%/lib

頭文件添加方法如:
#include   需要鏈接lib庫




2  WxWindows  (跨平臺的GUI庫)
      --------http://www.wxwindows.org
      --------http://sourceforge.net/projects/wxwindows
      --------http://i18n.linux.net.cn/others/wxWindowstut/wxTutorial.html

 因爲其類層次極像MFC,所以有文章介紹從MFC到WxWindows的代碼移植以實現跨平臺的功能。
通過多年的開發也是一個日趨完善的GUI庫,支持同樣不弱於前面兩個庫。並且是完全開放源代碼的。新近
的C++ Builder X的GUI設計器就是基於這個庫的。


vc71環境中編譯安裝
 版本:wxMSW-2.6.0-Setup.exe
 copy makefile.vc makefile
 通過 配置 config.vc 的 SHARED = 0 和 BUILD = debug
 確定 nmake clean all 的四種編譯結果:

include頭文件: include/wx
Lib庫文件:  lib/vc_dll  和 lib/vc_lib
DLL: lib/vc_dll 

頭文件在 %wxWidgets_root%/include/wx
庫文件在 %wxWidgets_root%/lib/vc_dll  和 %wxWidgets_root%/lib/vc_lib

頭文件添加方法如:
#include   需要鏈接lib庫



3   boost  (“準”標準庫)
  ------http://www.boost.org/
  ------http://sourceforge.net/projects/boost/

   Boost庫是一個經過千錘百煉、可移植、提供源代碼的C++庫,作爲標準庫的後備,是C++標準化進程
的發動機之一。 Boost庫由C++標準委員會庫工作組成員發起,在C++社區中影響甚大,其成員已近2000人
。 Boost庫爲我們帶來了最新、最酷、最實用的技術,是不折不扣的“準”標準庫。

vc71環境中編譯安裝
 版本:boost_1_32_0.exe

首先進入 tools/build/jam_src 運行 build.bat  得到一個工具: bjam.exe
將其複製到 boost_root 目錄下
執行 bjam "-sTOOLS=vc-7_1" stage 開始編譯  (bjam "-sTOOLS=vc-7_1" install)



頭文件在 %boost_root%/boost
庫文件在 %boost_root%/stage/lib 

頭文件添加方法如:
#include   有時要鏈接lib庫


Boost中比較有名氣的有這麼幾個庫:
Regex
正則表達式庫
Spirit
LL parser framework,用C++代碼直接表達EBNF
Graph
圖組件和算法
Lambda
在調用的地方定義短小匿名的函數對象,很實用的functional功能
concept check
檢查泛型編程中的concept
Mpl
用模板實現的元編程框架
Thread
可移植的C++多線程庫
Python
把C++類和函數映射到Python之中
Pool
內存池管理
smart_ptr
   5個智能指針,學習智能指針必讀,一份不錯的參考是來自CUJ的文章:
Smart Pointers in Boost,哦,這篇文章可以查到,CUJ是提供在線瀏覽的。

   Boost總體來說是實用價值很高,質量很高的庫。並且由於其對跨平臺的強調,對標準C++的
強調,是編寫平臺無關,現代C++的開發者必備的工具。但是Boost中也有很多是實驗性質的東西,
在實際的開發中實用需要謹慎。並且很多Boost中的庫功能堪稱對語言功能的擴展,其構造用盡精
巧的手法,不要貿然的花費時間研讀。Boost另外一面,比如Graph這樣的庫則是具有工業強度,
結構良好,非常值得研讀的精品代碼,並且也可以放心的在產品代碼中多多利用。



3   blitz  (高效率的數值計算函數庫) 
  ------http://folk.uio.no/patricg/blitz/html/index.html
  ------http://www.oonumerics.org/blitz/
  ------http://sourceforge.net/projects/blitz/

Blitz++ 是一個高效率的數值計算函數庫,它的設計目的是希望建立一套既具像C++ 一樣方便,同時
又比Fortran速度更快的數值計算環境。通常,用C++所寫出的數值程序,比 Fortran慢20%左右,因
此Blitz++正是要改掉這個缺點。方法是利用C++的template技術,程序執行甚至可以比Fortran更快。
Blitz++目前仍在發展中,對於常見的SVD,FFTs,QMRES等常見的線性代數方法並不提供,不過使用
者可以很容易地利用Blitz++所提供的函數來構建。

vc71環境中編譯安裝
 版本:blitz-0.8.tar.gz

將 blitz-0.8/Blitz-VS.NET.zip 解壓到當前目錄下
打開 Blitz-Library.sln  編譯即可

頭文件在 %blitz_root%/blitz
        %blitz_root%/random
庫文件在 %blitz_root%/lib    (靜態庫)

頭文件添加方法如:
#include   有時要鏈接lib庫
#include   不需要lib庫




4   log4cpp   (日誌處理)
   -------http://sourceforge.net/projects/log4cpp/
   -------http://log4cpp.hora-obscura.de/index.php/Main_Page


  Log4cpp 是 Log4J 的 C++ 移植版本,開放源代碼並且完全免費。與 Log4J 能夠跨平臺一樣,Log4cpp 
也致力於寫出跨平臺的 C++ 程序。Log4cpp 主要是用於 C++ 程序中寫 log 文件,與此同時,Log4cpp 中
有很多有用的類庫,對於寫跨平臺 C++ 程序的人來說,可以直接拿來用,或者作爲自己寫跨平臺類的參考。
  Log4cpp 中的跨平臺類庫有明顯的 Java 痕跡,比如 Class、Object 、Loader、Locale 等類。 Log4cpp
中的類都可以根據類名 new 出一個 instance,其實現的方式和 MFC 如出一轍:通過 C++ 強大的宏來實現。
  Log4cpp 中的跨平臺類庫主要有:
       信號類:Condition(broadcast,signal,wait),CriticalSection (lock,unlock),WaitAccess,
   Event(set,reset,wait),Mutex(lock,unlock), Semaphore(wait,tryWait,post)
       網絡類:InetAddress,Socket,ServerSocket,DatagramSocket,SocketInputStream,
   SocketOutputStream
       日期類:DateFormat,DateTimeDateFormat,System(currentTimeMillis)
       文件類:FileWatchdog(doOnChange)
       內存操作類:基於引用計數機制的智能指針 ObjectPtrT
       字符串操作類:StrictMath,StringHelper(toUpperCase,toLowerCase,trim,equalsIgnoreCase
   ,endsWith,format),StringTokenizer
       線程類:Thread(start,run,join)
     
  使用以上的類不用考慮 thread handle, event handle, socket handle 之類的 handle 問題,所有這些文
件已經被封裝了。很好用,對不對?
  不足之處在於沒有 GUI 類。ANSI C++ 中對於目錄等文件系統的處理功能較弱,這裏面也沒有目錄處理類。
另外 Socket 的 read(void * buf, size_t len) 不能設置 timeout,並且如果讀取數據個數小於 len 那麼 
read 函數將一直堵塞,不太好用,很可惜。實際的使用上面,可以考慮做一個 Socket 子類,重寫 read() 函數。


vc71環境中編譯安裝
 版本:log4cpp-0.3.5rc1.tar.gz

  打開 msvc6  編譯即可

頭文件在 %log4cpp_root%/include/log4cpp
庫文件在 %log4cpp_root%/lib

頭文件添加方法如:
#include   需要鏈接lib庫


5   Crypto++   加/解密算法庫
  ---http://sourceforge.net/projects/cryptopp/
  ---http://www.eskimo.com/~weidai/cryptlib.html
  ---http://www.cryptopp.com

  提供處理密碼,消息驗證,單向hash,公匙加密系統等功能的免費庫。
Crypto++ 是一個非常專業的C++ 密碼學函式庫,幾乎在密碼學裏頭常見的演算法都可以在Crypto++ 
找到實作的函式,如:block 與stream  ciphers,hash functions,MACs,random number generators,
public key 加密...等方法

vc71環境中編譯安裝
 版本:cryptopp521.zip

直接通過 cryptest.dsw 相關的庫

頭文件在 %cryptopp_root%
庫文件在 %cryptopp_root%/lib

頭文件添加方法如:
#include <*.h>  需要鏈接lib庫

6   ACE

   ------http://www.cs.wustl.edu/~schmidt/ACE.html

   C+ +庫的代表,超重量級的網絡通信開發框架。ACE自適配通信環境(Adaptive Communication Environment)
是可以自由使用、開放源代碼的面向對象框架,在其中實現了許多用於併發通信軟件的核心模式。ACE提供了一組
豐富的可複用C++ 包裝外觀(Wrapper Facade)和框架組件,可跨越多種平臺完成通用的通信軟件任務,其中包括:
事件多路分離和事件處理器分派、信號處理、服務初始化、進程間通信、共享內存管理、消息路由、分佈式服務動
態(重)配置、併發執行和同步,等等。

7. CppUnit
   -------http://sourceforge.net/projects/cppuint/

一個c++的單元測試框架,可以通過派生測試類的方式,定製具體的測試方案。xUnit家族的一員,
從JUnit移植而來,JUnit是Java語言的單元測試框架。

vc71環境中編譯安裝
 版本:cppunit-1.10.2.tar.gz

直接通過 CppUnitLibraries.dsw  編譯相關的庫

頭文件在 %cppunit_root%/cppunit
庫文件在 %cppunit_root%/lib

頭文件添加方法如:
#include   需要鏈接lib庫

8    Loki
      -----http://moderncppdesign.com
      -----http://sourceforge.net/projects/loki-lib/
      -----http://sourceforge.net/projects/loki-exp/

    其實可和Boost一起介紹它,一個實驗性質的庫。作者在loki中把C++模板的功能發
揮到了極致。並且嘗試把類似設計模式這樣思想層面的東西通過庫來提供。同時還提供
了智能指針這樣比較實用的功能。

  該庫系模板庫,庫本身無需編譯,在你的工程文件中 引用頭文件就可以使用,
如果 你直接或間接使用了small object,那你需要在你的工程文件 加上 SmallObj.cpp
如果 你直接或間接使用了Singletons,那你需要在你的工程文件 加上 Singleton.cpp



-----------------------------------------------------------------------------------------
學術性的C++庫:
-----------------------------------------------------------------------------------------
1     FC++: The Functional C++ Library
    --------http://www.cc.gatech.edu/~yannis/fc++/

 這個庫提供了一些函數式語言中才有的要素。屬於用庫來擴充語言的一個代表作。如果想要在OOP之外尋找另
一分的樂趣,可以去看看函數式程序設計的世界。大師Peter Norvig在 “Teach Yourself Programming in 
Ten Years”一文中就將函數式語言列爲至少應當學習的6類編程語言之一。

  當前版本:FC++.1.5.zip
   模板庫,在實際工程中 ,加上要用的頭文件 就可以編譯。

2     CGAL
     -----http://www.cgal.org

   Computational Geometry Algorithms Library的目的是把在計算幾何方面的大部分重要的解決方案和方
法以C++庫的形式提供給工業和學術界的用戶。

   當前版本:CGAL-3.1.zip
  這是一個已編譯的版本,當然也包括完整的源碼

頭文件在 %CGAL_root%/include/CGAL
庫文件在 %CGAL_root%/lib/msvc7

頭文件添加方法如:
#include   需要鏈接lib庫







-----------------------------------------------------------------------------------------
其它目前我感覺還不是很爽的C++庫:
-----------------------------------------------------------------------------------------
1  Doxygen
    ------http://sourceforge.net/projects/doxygen/
    ------http://www.stack.nl/~dimitri/doxygen/

註釋文檔生成工具,較之Doc++功能更爲齊全,可以生成包括HTML、PDF、RTF在內的多種格式的文檔,
並有GUI界面,除了支持c/c++語言外,還支持IDL、java、PHP、c#等。


2、   QT(windows版要付錢) 
    -------http://www.trolltech.com/
    -------http://www.qiliang.net/qt.html

  Qt是Trolltech公司的一個多平臺的C++圖形用戶界面應用程序框架。它提供給應用程序開發者建立藝術級的圖形
用戶界面所需的所用功能。Qt是完全面向對象的很容易擴展,並且允許真正地組件編程。自從1996年早些時候,
Qt進入商業領域,它已經成爲全世界範圍內數千種成功的應用程序的基礎。Qt也是流行的Linux桌面環境KDE 
的基礎,同時它還支持Windows、Macintosh、Unix/X11等多種平臺。


3、Fox
  ---------http://www.fox-toolkit.org/
  開放源代碼的GUI庫。作者從自己親身的開發經驗中得出了一個理想的GUI庫應該是什麼樣子的感受
出發,從而開始了對這個庫的開發。有興趣的可以嘗試一下。


4  xml4c
   ------http://www.alphaworks.ibm.com/tech/xml4c

IBM的XML Parser,用c++語言寫就,功能超級強大。號稱支持多達100種字符編碼,能夠支持中文,
適合於大規模的xml應用。若只是很小範圍的應用,則非最佳選擇,畢竟,你需要“揹負”約12M左右的
dll的沉重負擔

5    Xerces c++
      -------http://xml.apache.org/xerces-c

Apache的XML項目,同樣是c++ 實現,來源於IBM的xml4c,因此編程接口也是和xml4c一致的。但是
目前只支持少數的字符編碼,如ASCII,UTF-8,UTF-16等,不能處理包含中文字符的XML文檔。
  Xerces-C++ 是一個非常健壯的XML解析器,它提供了驗證,以及SAX和DOM API。XML驗證在文檔類型定
義(Document Type Definition,DTD)方面有很好的支持,並且在2001年12月增加了支持W3C XML Schema 
的基本完整的開放標準。

6   XMLBooster
     -------http://www.xmlbooster.com/

   這個庫通過產生特製的parser的辦法極大的提高了XML解析的速度,並且能夠產生相應的GUI程序
來修改這個parser。在DOM和SAX兩大主流XML解析辦法之外提供了另外一個可行的解決方案。



-----------------------------------------------------------------------------------------
C++開發環境(Win平臺下除了 Visual C++ 和 Borland C++以外的):
-----------------------------------------------------------------------------------------

1. Cygwin  (Windows下的一個Unix仿真環境)
   這個Cygwin的一部分是GCC的另外一個Windows移植版本,Cygwin是Windows下的一個Unix仿真環境。
嚴格的說是模擬GNU的環境,這也就是"Gnu's Not Unix"要表達的意思。

   至Cygwin的網站http://www.cygwin.com/下載安裝程式setup.exe,可直接點選執行或先行下載
至個人電腦後再執行。
   目前我已經下載到本地了,直接安裝即可。

2.  MinGW  (GCC的一個Windows移植版本)
    1)http://sourceforge.net/projects/mingw 直接訪問的,點擊 Files,然後下載以下文
件:MinGW-3.1.0-1.exe, mingw32-make-3.80.0-3.exe。
安裝MinGW 到 C:/MinGW 目錄下,然後安裝 mingw32-make 到 C:/MinGW 下,通過瀏覽器
到 C:/MinGW/bin 下,將 mingw32-make.exe 改名或者另外複製爲 make.exe。

(以上的設置已經足夠。不過爲了求新,我是同時下載了 gcc-core-3.4.2-20040916-1.tar.gz,
mingw-runtime-3.5.tar.gz 和 w32api-3.1.tar.gz,將它們直接解壓到 C:/MinGW 下更新舊的
文件。不過這對這篇文章本身沒有任何影響。新舊兩種配置我都測試過。)

 安裝次序: 
    MinGW-3.1.0-1.exe
    mingw32-make-3.80.0-3.exe
    gcc-core-3.4.2-20040916-1.tar.gz
    mingw-runtime-3.5.tar.gz
    w32api-3.1.tar.gz
    gdb-5.2.1-1.exe
    mingw-utils-0.3.tar.gz
    binutils-2.15.91-20040904-1.tar.gz


  3)準備MinGW 用戶開發的命令行環境(一個批處理)
如: mingw.bat
@rem --------------------------------------
@SET MINGW_ROOT=D:/Mingw

@rem
@echo Setting environment for using Mingw.
@rem

@set PATH=%MINGW_ROOT%/BIN;%PATH%
@set INCLUDE=%MINGW_ROOT%/INCLUDE;%MINGW_ROOT%/INCLUDE/c++/3.2.3;%MINGW_ROOT%/include/c++/3.2.3/mingw32;%MINGW_ROOT%/include/c++/3.2.3/backward;%INCLUDE%
@set LIB=MINGW_ROOT/LIB;%LIB%
@rem ----------------------------------------

3. Dev C++   (一個C/C++ 的集成開發環境)

  GCC是一個很好的編譯器。在Windows上的C++編譯器一直和標準有着一段距離的時候,GCC就是一個
讓Windows下開發者流口水的編譯器。Dev-C++就是能夠讓GCC跑在Windows下的工具,作爲集成開發環
境,還提供了同專業IDE相媲美的語法高亮,代碼提示,調試等功能。由於使用Delphi開發,佔用內存
少,速度很快,比較適合輕量級的學習和使用。

  可以使用  MinGW-GCC 作爲它的編譯器 


4  Eclipse-CDT



遊戲開發

Audio/Video 3D C++ Programming Library

 ------http://www.galacticasoftware.com/products/av/
 ------http://sourceforge.net/projects/av3d/

AV3D是一個跨平臺,高性能的C++庫。主要的特性是提供3D圖形,聲效支持(SB,以及S3M),控制接口(鍵盤,鼠標和遙感),XMS。

KlayGE

 ------http://home.g365.net/enginedev/
 ------http://sourceforge.net/projects/klayge/

  國內遊戲開發高手自己用C++開發的一個開放源代碼、跨平臺的遊戲引擎。KlayGE是一個開放源代碼、跨平臺的遊戲引擎,並使
用Python作腳本語言。KlayGE在LGPL協議下發行。感謝龔敏敏先生爲中國遊戲開發事業所做出的貢獻。

OGRE

 ------http://www.ogre3d.org
 ------http://www.ogre3d.org/docs/manual/
 ------http://sourceforge.net/projects/ogre


 OGRE(面向對象的圖形渲染引擎)是用C++開發的,使用靈活的面向對象3D引擎。它的目的是讓開發者能更方便和直接地開發
基於3D硬件設備的應用程序或遊戲。引擎中的類庫對更底層的系統庫(如:Direct3D和OpenGL)的全部使用細節進行了抽象,並提供了基於現實世界對象的接口和其它類。

發佈了71 篇原創文章 · 獲贊 11 · 訪問量 40萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章