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

自訂網域很難嗎?DNS 的限制與實踐

自訂網域很難嗎?DNS 的限制與實踐

自訂網域(Custom Domain)是 SaaS 常見的服務,只是我通常都沒花錢買。某次跟朋友聊天,她想聽聽我對內容平台的觀點,嘰哩呱啦分析完一堆後,我最後建議她,最好還是買個網域: 「你想想看,妳現在投入這麼多心力在經營內容,建立自己的品牌形象。如果妳的網址永遠都掛在別人的平台底下,就像在別人家租房子,雖然方便,但終究不是自己的。」 「有了自訂網域,妳的品牌就是自己的,無論未來平台怎麼變,妳的讀者都能透過固定的網址找到妳,這對品牌來說很重要。就算未來妳想換平台,也不會流失妳辛苦建立起來的流量。」 後來我在 Ghost 官方頁面看到類似說法 If you would like to make your site memorable and easy to find with a branded custom domain, then you can

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

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

某個下雪天,我拖著病體,組裝一套供使用者簡報之用的破爛系統,莎朗進來發現我在操控台前勉強支撐,她便離開了,幾分鐘後,她端著一鍋湯回來,為我倒了一杯,我的精神為之一振。我問她要做的管理工作那麼多,怎麼會有空做這種事,她向我展露她的招牌微笑,說:「湯姆,這就是管理。」 -《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