第218期 / December 5, 2015

研發新視界

分享到臉書!分享到維特!分享到噗浪!分享到Google+!分享到微博!轉寄友人友善列印

跨平台的C++ IDE: Code Blocks

作者/林聖訓

[發表日期:2015/12/4]

前言

商業用途開發的程式系統多建置在開源的Linux環境中編譯與執行;就C++而言,一般可利用vim進行程式碼撰寫編輯,建立Makefile自動化編譯指令,並以GDB 進行除錯。對Linux平台操作十分精熟的專業工程師來說,這些工具或許早已運用地如自己手腳般靈活。然而對於剛接觸C++程式的新手或是平時工作環境都是以Windows系統並進行版本控制或文件製作的使用者來說,使用跨平台的IDE作為起手的程式開發工具不妨是個好選擇,而本文將介紹好用的C++ IDE其中之一:簡潔又輕便的Code Blocks的使用與其效益。

使用IDE降低入門門檻

在此之前先介紹何謂IDE,IDE是整合開發環境(Integrated Development Environment),意思是集成了多個原本需要在命令列下達指令的工具藉由圖形化使用者界面(GUI)來實現整個程式開發過程。它包含色彩分明的語法顯示與各種函式。變數搜尋的熱鍵幫助你的程式撰寫(Code),利用Code Blocks內建編譯器MinGW中的GNU GCC Compiler進行編譯(Compile)將程式轉成Object File, 再由GNU Linker將其轉為可執行的程式(Run),最後仍少不了GDB 來協助偵錯(Debug),提供圖形化中斷點的建立與監看列表,甚至可下Bug Tracking的command。這一連串的過程,都簡化並呈現在介面上的按鈕、清單、列表或是熱鍵,而不再是一行行的指令,這對初期剛接觸程式開發的工程師來說帶來許多便利性且省去了許多程式開發外的上手時間。


《圖一》


常見的C++ IDE有Eclipse CDT (C/C++ Development Tooling), NetBean , Microsoft Visual C++, Dev-C++…等。

Eclipse和NetBean常見於各語言開發,相容性與擴充性非常高,但體積過於肥大與執行效率是其問題; Visual C++執行速度快,Highlight、 Autocomplete與Hot key十分方便易用,缺點是占用記憶體較大、僅限於Windows開發且非免費軟體;而Dev-C++體積小功能完整,不過僅限於Windows且版本開發目前已停止,而本文介紹的Code Blocks是可跨平台的自由軟體,也是使用C++撰寫而成,執行速度很快;加上所攜之編譯器MinGW只有幾MB的大小,相對其他軟體輕巧許多,功能也可說十分齊全。


《表一》各C++ IDE比較


Code Blocks功能介紹

一、介面總覽:


《圖二》Code Blocks主視窗


  • 項目視圖(Project View):位於圖二左上方綠色區塊,列出包含在此專案的原始碼,標頭或資源檔,並且Code Blocks擁有自建的makfile,可選擇所加入的檔案是否加入編譯清單,也可以使用指定的makefile進行編譯。


  • 中斷點、監看式與呼叫堆疊(Break point 、 Watches & Call Stack):中斷點的下達十分容易,只要在圖二黃色區塊程式碼行首點擊或是使用熱鍵(F5)即可。使用GDB偵錯時,可選擇觀察的變數並陳列在圖中左方綠色區塊的Watchs 清單中, 而Call Stack可看出程式途中所經子程式的堆疊。


  • Build LOG & Debugger:圖二下方紅色區塊可顯示編譯時產生的Warning與Error並自動導向程式碼片段,而Debugger頁籤則可下Bug Tracking的command。


  • 二、Syntax Highlighting:

    位於SettingsEditor註解。關鍵字與數字等以各種顏色區別標示,並可自訂主題背景顏色,如下圖三:


    《圖三》語法高亮與主題設定


    三、Autocomplete:

    程式碼自動完成, 預設3碼,也可調整Automatically launch when typed # letter提示數字為2位,如下圖四:


    《圖四》自動完成功能


    四、導航相關:

    Find 函式、變數之宣告實作或搜尋,另外還有函式折疊、展開等功能如下圖四,也有提供Keyword Shortcuts自定義喜愛的熱鍵與動作。


    《圖五》Find 系列搜尋功能


    跨平台執行之效益

    為什麼說到跨平台是個考量的要點,又能帶來什麼效益? 有以下兩點論述:

    一、伺服器與個人電腦的衝突

    目前伺服器市場上仍以Linux系統為主流,其因在於開放原始碼、低系統占用率、高處理效能與資源分配能力是其優勢,因此企業大多偏好將程式建置在Linux運行;然而程式開發人員個人使用的電腦卻幾乎是使用Windows來進行商務通訊,如收發Email、程式分享討論與版本控制,維護的方式通常是在PC上使用自己慣用的文字編輯器來檢視或撰寫程式碼,最後放上伺服器進行編譯或偵錯才發現問題,如果一開始在Windows系統上就能及時編譯與偵錯,那麼是否能因此節省許多時間? 再者,如前言所述,在伺服器上靈活運用編輯工具(vim)與GDB進行偵錯有一定的熟悉門檻存在,指令的運用與執行不見得如IDE所做到的那麼直覺化;此外,若有使用版本控制且並非建構在Linux上,也有可能因工程師疏失在伺服器上修改後忘記傳回版控軟體,造成兩邊不同步的狀況發生。所以使用跨平台工具進行開發則可避免以上時間耗費與問題的發生。

    二、方便測試報告產出與檢視

    工程師程式經過編譯與偵錯確認語法與邏輯無誤後,接著就是進行測試。透過跨平台IDE的工具,我們可以撰寫程式碼並且設定目標為可運行在Linux伺服器上的程式為主,而以Windows為輔,進行預先編譯與測試。我們可在PC上透過額外撰寫測試用的小程式帶入主要程式碼片段,並以參數的方式建立各項測試案例的輸入,輸出部分則可透過產出靜態網頁或是EXCEL報表等易於檢視的格式,以期做到自動化測試與報告產製的結果,一來縮短每次版本變更所耗費於重複性測試的時間,二來又能產生完整的測試文件。

    Code Blocks運用實例

    一、跨平台運作

    假設程式最終是要在Linux伺服器上運行,那我們在Windows上使用只要做到編譯與執行的重點即可,而Code Blocks附帶的編譯器是使用MinGW(Minimalist GNU for Windows),它將GCC和GNU移植到Windows使用,內含了執行檔。庫與表頭,使得可在Windows直接執行而不用提供Linux POSIX API運行所需的環境。簡單來說它可以模擬程式碼在Linux運行所引用的API或表頭檔,使得程式得以編譯與執行。然而有些實質功能卻無法完全實現,例如常使用到的多執行緒pthreads,在Windows並沒有支援這樣的功能。萬一真的需要使用這樣的功能,我們可以在程式碼引用pthread.h之後,再另外define for Windows的程式碼並實作相同函式名的功能,也不會影響到原伺服器上的運行,方法如圖六所示:在Project build options中Defiine一個名稱,並在圖七程式碼部分#ifdef 和 #endif區間rewrite函式功能或是定義變數。


    《圖六》專案自行定義設定



    《圖七》程式碼define片段範例


    二、利用Code Blocks產出測試報告

    憑著IDE可在Windows開發並執行的優勢,我們可撰寫測試用的小程式,並帶入主要程式邏輯進行案例模擬測試,以期貨下單風控系統為例,將要檢核下單的商品資訊寫成檔案當作程式的輸入,藉由ProjectSet program’s arguments…代入程式作為參數如圖八,並將風控查詢結果以HTML附帶EXCEL報表方式輸出,如下圖九所示,而所有模擬下單商品所建的案例檔案都能在下次版更之後重複使用。


    《圖八》設定啟動應用程式之參數



    《圖九》HTML網頁嵌入測試結果與報表


    結語

    本文介紹的Code Blocks 只是眾多C++ IDE其中一款,就各款提供的功能來說大同小異,偏好的需求也因人而異;有的在乎執行速度,而有的人只在乎易用程度。使用IDE的用意都是在分擔工程師開發所遇到的冗雜事務,並且如何有效地運用IDE帶給你的週邊效益並縮短你的專案時程才是重點所在,若你評估使用IDE能帶來更大的便利性與減少失誤的可能,那不妨花些時間研究,相信上手之後它會成為你工作上的得力助手。

    參考資料

  • IDE比較(維基)

  • Code Blocks Manual

  • Pthreads on Microsoft Windows
  •