「加個 getchar() 讓視窗不關閉,就是軟體了」
這只是讓控制台暫停,**本質仍是文字模式程式**,無安裝包、無圖形介面、無檔案關聯、無自動更新、無簽名驗證。
| 階段 | 關鍵任務 | 工具/技術 |
|---|---|---|
| 1. 程式碼組織 | 模組化、分層(核心邏輯/平台抽象/介面)、單元測試 | CMake、Meson、頭檔/源檔分離、靜態/動態庫 |
| 2. 建構系統 | 跨平台編譯、Debug/Release、最佳化、Sanitizer、LTO | CMake + Ninja、MSBuild、Make、Bazel |
| 3. 圖形介面 (可選) | 視窗、控件、事件迴繞、繪圖、DPI 感知、無障礙 | 跨平台:Qt、wxWidgets、Dear ImGui、GTK Windows 原生:Win32 API、WRL/WinUI 3、MFC (維護模式) Web 技術:Electron/Tauri/Wails (C 做後端 + 前端 UI) |
| 4. 資源管理 | 圖示、字型、翻譯、設定檔、授權條款嵌入 | Qt Resource (qrc)、Windows RC、CMake configure_file |
| 5. 打包與安裝 | 安裝程式、解除安裝、開始選單捷徑、檔案關聯、自動更新 | Windows:NSIS、Inno Setup、WiX、MSIX Linux:DEB/RPM、AppImage、Flatpak、Snap macOS:DMG、PKG、Homebrew 跨平台:CMake CPack、Conan、vcpkg |
| 6. 簽名與分發 | 代碼簽名 (EV 憑證)、SmartScreen 信譽、Notarization (macOS) | signtool、codesign、osslsigncode、GitHub Releases、自有下載站 |
| 7. 遙測與回饋 | 崩潰收集、使用統計、自動更新檢查 | Breakpad/Crashpad、Sentry、自建 API |
cli11 (C++) / argparse (C 移植)。fmt 庫。indicators (C++) / 手寫簡易版。「寫出 `.exe`」≠「開發軟體」。**軟體工程 = 程式碼 + 建構 + 打包 + 簽名 + 分發 + 維運**。從一個 `main.c` 起步,逐步補齊上述環節,才能產出可交付、可維護、用戶信任的專業軟體。