iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0
Software Development

C++ 套件管理器求生指南 Conan vs Vcpkg系列 第 2

D02: 套件管理東西軍 Conan 還是 vcpkg 都機!

  • 分享至 

  • xImage
  •  

系列開始之前,我要先做一點聲明:這個鐵人賽系列文都是我一個字一個字打出來的。

當然我會用 AI 研究問題,會跟 AI 腦力激盪,但是我就是不想叫 AI 幫我寫文章。

如果你不小心眼尖抓到了某句讓人生煩的 AI 語法,那一定不是我違背諾言偷偷叫 AI 幫我寫,而是我已經看太多 AI 文被洗腦了啦。(馬上用了一次「不是...,而是...」句型,逃~)

好,我們廢話不講了,開始吧。

以下我會陳列十個關鍵事實作為暖身,讓大家快速一窺這兩套管理器的各種面向(合不合你個人口味):

事實一:Conan 是用 Python 寫的,vcpkg 是用 C++/CMake script 寫的

  • C++的套件工具竟然是用其他語言寫的,這樣政治正確嘛?不過話說這年頭還有人電腦上沒裝 Python 的嗎?其實真的有啦,所以後來 Conan 也提供了免 Python 的獨立安裝檔。vcpkg 血統看起來就純正多了,但是就我所知不喜歡 CMake 的人也是不少XD

事實二:Conan & vcpkg 都跨平台

  • Conan 支援 Windows, macOS, Linux, FreeBSD, 以及一些 Unix 分支
  • vcpkg 支援 Windows, macOS, Linux, FreeBSD, 以及一些 Unix 分支
  • 雖然 vcpkg 的名字看起來很像只支援暈倒系統,但其實兩者在所有的主流平台都可用喔

事實三:Conan 和 vcpkg 都是 MIT 授權,可免費自用商用

  • 咦,那這些公司賺什麼?
  • JFrog 賣的是企業內部用的 Artifactory(支援Conan的私有倉庫),微軟賣 Visual Studio 與 Azure

事實四:套件倉庫

事實五:套件數目

  • 撰寫本文的當下,Conan Center 共收錄了 1948 個套件,Vcpkg registry 共收錄了 2858 個套件
  • 看起來 vcpkg 的套件數目比 Conan 多了將近一千個,真的差這麼多嘛?vcpkg 有個把子模組拆來算的習慣,像是 vcpkg 光是 boost 就有 162 個。相對的 Conan 只有一個 boost。所以雖然 vcpkg 的套件數目確實多一些,但是差距沒有那麼大。

事實六:Build System

  • Conan 直接支援眾多建構系統:CMake, MSBuild, Makefiles, Meson, SCons, Bazel, Xcode 等等
  • vcpkg 只支援兩套建構系統: CMake & MSBuild
    • 官方說你還是可以透過 vcpkg 下載套件,然後自己設定 include/link 路徑來橋接到其他建構系統上,有點硬凹,但是也沒說錯啦

備註:這可是寫 C++ 才有的奢侈呢,有好多個建構系統可以選:今天的心情我想用 CMake,明天想用 Bazel,後天想用 SCons,任君挑選,是不是很棒啊?超棒的對吧?

事實七:下載二進位檔

  • conan install 安裝套件時,可以從官方伺服器下載預先編譯好的二進位檔案,省下在自己電腦上編譯的時間,前提是你的編譯器組態恰好跟官方預設的一樣!(當然在自己電腦上編譯也完全允許的)
  • vcpkg install 安裝套件則是一律下載原始碼並現場在自己電腦上編譯。只有第一次需要編譯,第二次以後就從本機快取拿。用 vcpkg 安裝 Qt 之類的大型函式庫,第一次等編譯可能會等到天荒地老,時間足夠你好好睡一場覺。

事實八:版本觀完全相反

  • Conan 允許指定每個套件的版本,每一個套件的每一個版本號都由你指定,給你完全的自由,但是有菱形衝突自己解決
  • Vcpkg 是微軟幫你挑好的一組相容的套件版本號,經微軟驗證,無腦可用。但是想升版時,常常需要整組函式庫一起升,只想更新某一特定套件版本時比較不方便(不是辦不到,只是比較不方便)。

事實九:深入使用的體驗

碰到了進階使用情境,Conan 使用者大多數時候都在寫 Python code,vcpkg 使用者都在寫 JSON+CMake。你比較喜歡泡在 Python 還是 CMake 語法裡呢?

事實十:大改版

  • 兩者推出初版的幾年後,又都不約而同的出了一個不相容的重大改版
  • 2023 年大改版 Conan v2.0 推出,完全不相容 Conan v1。大量早年的網路教學文章還停留在 Conan v1,小心不要照抄否則會一直撞牆。
  • 2020 年底 vcpkg 推出了全新的清單模式 (Manifest Mode),但是卻沒有移除原本的傳統模式 (Classic Mode),所以現在還是 Manifest/Classic Mode 並存的狀態,但兩者用法卻完全不同,看教學文章時要分清楚。

上一篇
D01: 都2026了用C++外部函式庫怎麼還那麼麻煩
下一篇
D03: Conan 套件管理第一步:Hello conanfile.txt
系列文
C++ 套件管理器求生指南 Conan vs Vcpkg6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Miles
iT邦新手 2 級 ‧ 2026-09-16 23:22:04

太強了,佩服每個字都自己打的大師

我大多都是自己打的,但會用 AI 輔助校稿,而有部分的內容是由 AI 寫的

我要留言

立即登入留言