模組化開發-C++的模組化開發架構

C++ 模組化開發架構,能像 Python 的 whl 套件一樣方便引入、重用,並且能被多個 CLI 專案共享。下面我幫你規劃一個完整的架構設計,並附上分層思路與工具選擇。

🏗️ 架構設計目標

  • 第三方函式庫引入方便:支援包管理工具,避免手動編譯依賴。
  • 函式庫可重用:像 Python 的 whl 一樣,封裝成可分發的二進位或 source package。
  • 多專案共享:同一套函式庫能被多個 CLI 專案引用,不需重複編譯。

🔑 核心設計要素

1. 包管理與依賴控制

  • 使用 Conanvcpkg 作為 C++ 的套件管理工具:
    • Conan:支援跨平台、版本控制、私有倉庫。
    • vcpkg:微軟官方,整合度高,適合 Windows/Linux。
  • 這樣就能像 Python pip install 一樣,快速引入第三方函式庫。

2. 模組化專案結構

建議採用 CMake + Conan/vcpkg 的組合,專案結構如下:
Code

project-root/
│── cmake/                  # 共用 CMake 模組
│── libs/                   # 自研函式庫 (模組化)
│   ├── image_processing/   # 範例模組
│   │   ├── include/        # 公開 API header
│   │   ├── src/            # 實作
│   │   └── CMakeLists.txt
│   ├── math_utils/
│   │   └── ...
│── apps/                   # CLI 應用程式
│   ├── cli_tool_A/
│   │   └── CMakeLists.txt
│   ├── cli_tool_B/
│── CMakeLists.txt          # 頂層
│── conanfile.txt           # 套件依賴

3. 函式庫封裝與重用

  • 每個 libs/xxx 模組都編譯成 靜態庫 (.a/.lib)動態庫 (.so/.dll)
  • 提供 公開 API header,避免 CLI 專案直接依賴內部實作。
  • 可以打包成:
    • Conan package:像 Python whl,可上傳到私有/公開 Conan server。
    • CMake FetchContent:讓其他專案直接引用 Git repo。

4. 多 CLI 專案共享

  • 頂層 CMakeLists.txt 管理所有模組,CLI 專案只需 target_link_libraries(cli_tool_A PRIVATE image_processing math_utils)
  • 如果 CLI 專案分散在不同 repo:
    • 使用 Conan packagevcpkg registry,讓 CLI 專案直接安裝依賴。
    • 或者提供 prebuilt binary + headers,像 Python whl 一樣。

📦 對照 Python whl 的便利性

Python whl C++ 對應方案
pip install package conan install packagevcpkg install package
模組封裝成 wheel 模組封裝成 Conan/vcpkg package
多專案共用 site-packages 多專案共用 Conan/vcpkg cache
發布到 PyPI 發布到 Conan server / vcpkg registry

🚀 建議落地步驟

  1. 選定包管理工具:Conan(跨平台)或 vcpkg(Windows/Linux)。
  2. 建立模組化結構:每個函式庫獨立 CMake + include/src。
  3. 封裝函式庫:打包成 Conan/vcpkg package,提供版本號。
  4. 多專案引用:CLI 專案只需 find_package()conan install
  5. 持續整合:CI/CD pipeline 自動編譯並發布 package。

Also See

File13FileLast Modified
推薦網站推薦網站1:23 AM - December 07, 2025
MISRA C++類似針對某應用規範的標準MISRA C++類似針對某應用規範的標準1:23 AM - December 07, 2025
MISRA C++MISRA C++1:23 AM - December 07, 2025
Design PatternDesign Pattern1:23 AM - December 07, 2025
CPPCPP1:23 AM - December 07, 2025
C++的演進與比較C++的演進與比較1:23 AM - December 07, 2025
C++23C++231:23 AM - December 07, 2025
C++20C++201:22 AM - December 07, 2025
C++17C++171:22 AM - December 07, 2025
C++14C++141:22 AM - December 07, 2025
C++11C++111:22 AM - December 07, 2025
About Visual C++About Visual C++1:22 AM - December 07, 2025
模組化開發-用 CMake + Conan 封裝並重用 C++ 函式庫模組化開發-用 CMake + Conan 封裝並重用 C++ 函式庫8:20 PM - December 06, 2025