C++ 開發環境架設:使用 CodeLite

很久沒寫 C++ 了,上次是一年多前的事,當時為了在專案中使用 TDD 開發,套用 CppUTest 當 Unit Test Framework,而這套 Framework 就是用 C++ 寫的。最近工作上又需要用到 C++ 當底層資源,環境重架之餘,順手紀錄一下歷程。

原本的開發環境是 Windows 7 + uVision,使用 C 來開發 MCU。為了導入 TDD,需要在 Local 端有編譯執行的能力,考量到資源開放性,選擇用 cygwin 來執行 GNU,同時選擇當時資源豐富的 VSCode 做為編輯器。如果現在重選的話,可能會直接使用 Ubuntu 的 GNU,搭配 STM32CubeMX 自動生成 Makefile 來編譯,不論是自由度還是效能都較好,而且沒有後面 cygwin 一系列踩坑問題,But,人生就是這個 But,當時我不知道 cygwin 有這麼多坑。

由於現在工作的開發環境會用 Windows 10,仍然需要找個在 Windows 下的編譯執行工具,同時也希望是 cross-platform,無論 IDE 有多好,如果不能 cross-platform,不利於現在變動頻繁的開發環境與挑戰(想想看,原本用 .NET 全家餐用得好好的,結果開發環境變 Linux,又要重新用一套 IDE,而且你可能已經在原本的 IDE 上自行整合一些套件了)。現行的幾款 C++ IDE 有 CodeLite、Eclipse、CLion、Dev-C++、Visual Studio。由於我不想為 C++ 重新編寫 Makefile,不考慮 VSCode、Notepad++ 等 Editor;Dev-C++ 跟 Visual Studio 因為無法跨平台也劃掉;CLion 是 JetBrains 開發的 IDE,據說相當優秀,是很多人的首選,但我只需要開發小程式,用付款軟體太麻煩,劃掉;Eclipse 通常開發 Java 比較多,而且吃的資源有點兇,因此最後選用 CodeLite 來開發。

如果你是習慣使用 Visual Studio 的 Windows 開發者,不用懷疑,直接用 Visual Studio;如果你想在工作上選擇一款 cross-platform,CLion 是你的好夥伴;如果你只是想簡單寫點程式來驗證概念,也許可以跟我一樣用 CodeLite。

Install MinGW

CodeLite 底層推薦用 MinGW 中的 GNU toolchain 來編譯,如果對象平台是 Windows,也可以使用 Visual C++,因為 WIN 10 有 WSL 可以執行 Linux Binary File,使用 MinGW 就能滿足需求了。

MinGW 是一套 Windows 下的開發環境,讓 Windows 的開發者也能使用 GNU 等 Linux 工具。要安裝 MinGW,到 MinGW 官網下載安裝程式

安裝時,在 Basic Setup 中選擇 mingw32-base-bin、mingw32-gcc-g++-bin、msys-base-bin

安裝完後,要將執行檔路徑加入環境變數,讓 CodeLite 能抓到底層。打開控制台\系統及安全性\系統,選擇[進階系統設定],點選[環境變數]

在系統變數中,編輯 Path

將 C:\MinGW\bin 加入 Path 中。

Install CodeLite

接著來安裝 CodeLite,到官網下載安裝檔,官網上可以看到 CodeLite 主要支援三款語言:C++、php、node.js,主要 TA 是放在後端上

下載,解壓縮,執行,一路安裝精靈到結束,沒難度。

Configure CodeLite

首次執行 CodeLite 時,先用 Setup Wizard 設定環境,開發的環境先用 C/C++

如果前面有成功安裝 MinGW 跟 g++,這邊選擇 Compiler 時就會看到

Test Example

設定完後,用 CodeLite 來寫一支簡單的 C++,確認功能正常。先建立工作空間,在工作空間點右鍵,加入新專案

選擇用 g++ 的 Console Template

CodeLite 會套用範本長出基本檔案

CPPWorkspace
├-- Test1
    ├-- src
        ├-- main.cpp

打開 main.cpp,查看內容

#include <stdio.h>

int main(int argc, char **argv)
{
    printf("hello world\n");
    return 0;
}

由於這是 C,將它改成 C++

#include <iostream>

int main()
{
    std::cout << "Hello testing...";
    return 0;
}

來建置並執行程式,先在導覽列選擇 Build > Clean Project ,把舊的檔案(如果有的話)清空,選擇 Run 來建置執行

程式執行完成,開發環境建好啦!

小結

整個執行下來,最麻煩的不是軟體操作,而是一開始要選用哪個 IDE。原本想依照平常的開發環境,選用 VSCode,但因為需要 Compiler,又不想用 cygwin,只好研究 VSCode 跟 WSL 的串法,真的串起來後又發現自己不想寫 Makefile,只好回去選別的 IDE。

也想說是不是直接用 cl 來編譯,但查詢 VSCode 的文件後,發現

Start VS Code from the Developer Command Prompt

To use MSVC in VS Code, you must start VS Code from a Developer Command Prompt for Visual Studio. An ordinary Windows command prompt, or a Bash prompt, does not have the necessary environment variables set.

如果有 Visual Studio,直接用 Visual Studio 就好啦,為了要寫個小程式還要特定安裝大型 IDE,好像有點誇張。而且 Visual Studio 不是跨平台,跟我的訴求不合。找了一陣子後,決定採用 CodeLite。

反倒後面安裝執行沒問題。人生就是這樣,做決定最困難。

Reference

Read more

從個人貢獻者到管理者:關於領導的反思

從個人貢獻者到管理者:關於領導的反思

某個下雪天,我拖著病體,組裝一套供使用者簡報之用的破爛系統,莎朗進來發現我在操控台前勉強支撐,她便離開了,幾分鐘後,她端著一鍋湯回來,為我倒了一杯,我的精神為之一振。我問她要做的管理工作那麼多,怎麼會有空做這種事,她向我展露她的招牌微笑,說:「湯姆,這就是管理。」 -《Peopleware: Productive Projects and Teams》 有次跟一名職涯顧問聊天。我提到:「我希望透過打造產品來替別人創造價值,如果有很棒的團隊,我相信自己能辦到。」她問:「團隊是必須的嗎?」我愣住了,隨口說:「因為打造產品需要很多不同的職能……還需要可持續性的運作,對,我想團隊是必要的。」事後回想,她的問題很有趣,現代社會好像把「團隊」和「領導」當成是成功的標配,人力市場也一堆團隊主管的職缺,這是一則現代神話嗎?還是某種工業革命時代的遺產? 身為個人貢獻者的管理者 不是說團隊不重要,只是在現代,你會用不同的角度審視完成目標需要的條件。你想想,如果你是個開發者,自己架網站、

By Ken Chen
CDN 的快取失效設計:內容平台場景

CDN 的快取失效設計:內容平台場景

Phil Karlton 有句名言:「計算機科學中只有兩件難事:快取失效和命名。」 想像你在管理網站,因為傳輸速度與伺服器效能問題,網站讀取速度很差,特別是當你的使用者來自地球另外一端,常常需要等待幾秒才能看到畫面,這讓他們的使用體驗大打折扣。身為一名重視使用體驗的開發者,你肯定知道該如何解決這問題,沒錯,答案就是 CDN(內容傳遞網路)。 CDN 可以看成是服務商在全球各地建置伺服器,當你的網站內容(例如圖片、CSS、JavaScript、影片等)流經這些伺服器時,它會保留一份複本(稱為快取),等到下次有人讀取同樣的內容,CDN 會拿出複本給使用者。因為全球各地都有 CDN 節點,美國的使用者可以由美國節點提供,日本的使用者可以由日本節點提供。這樣既加速網路傳遞效率,也降低來源伺服器的效能壓力,可謂一舉兩得。 當然這是有條件的。CDN 會使用網址來判斷快取是否是相同檔案,假設你的內容以圖片為主,通常來說,當你更換圖片,新舊兩張圖片會有不同網址,被當成兩個不同的檔案,新圖使用新快取,舊快取留著也沒差;但如果你的內容是文字,新舊版文字很可能有相同網址,

By Ken Chen
收拾行李搬家去:從 Medium 到 Ghost

收拾行李搬家去:從 Medium 到 Ghost

想搬家想很久,連身邊的朋友都搬完了,我還沒動工。 原因是我懶,我討厭麻煩,每次有人問我吃什麼,我都回答麥當勞。搬家是一件麻煩事,我已經有一份很讚的工作了,全副精神都放在工作上,偶爾才會想起來,反正家什麼時候都能搬,一點也不急,有什麼好急的呢對吧。這樣一拖,就拖到現在。 繼續用 Medium 不好嗎? 跟男女朋友分手一樣,通常被問到:「對方不好嗎?」得到回答是:「也沒有不好啦,只是……(以下開放填空)。」 從優點開始講吧!Medium 的編輯器很棒,它是 WYSIWYG(所見即所得)類型的編輯器,能讓創作者快速發佈內容,也因為它讓內容發佈更容易了,它開始吸引一批優秀的創作者,這批創作者持續創作內容,又吸引來更多讀者,更多讀者激勵創作者產出內容,內容又再吸引讀者……這形成一個增強迴圈。Medium 還能支援多人協作,拜它時尚簡約的風格所賜,科技公司會使用 Medium 來打造品牌形象,例如我前公司的 Tech Blog

By Ken Chen
OpenTelemetry 的可觀察性工程:以 Sentry 為例

OpenTelemetry 的可觀察性工程:以 Sentry 為例

點進 OpenTelemetry 的官方文件,它最先映入眼中的句子是「什麼是 OpenTelemetry」。例如,它是套可觀察性框架,用於檢測、蒐集與導出遙測數據;它是開源且供應商中立,能搭配其他的開源工具,像 Jaeger 或 Prometheus;它能將應用程式與系統儀表化,無關是用 Go 還是 .NET 開發,也無關部署在 AWS 還是 GCP 上。 但是身為一名開發者,當下我們想的是:「公司常開發一些沒人要用的功能,聽說 OpenTelemetry 可以提高可觀察性,也許我們應該放棄開發功能,轉頭建立更好的開發環境。」「AWS 常常要不到需要的數據,也許我們應該改用另一套工具,像是 OpenTelemetry,來解決這件事。」我們想像 OpenTelemetry 「應該」要能解決目前面臨到的一些問題,就像在技術的鏡像中尋找願望一樣。 如果已經有在用 Sentry,還需要導入 OpenTelemetry

By Ken Chen