終於到了最後一天了。好累啊XDDDD
回頭看,我覺得套件管理器最大的好處,是把「管理依賴」這件事抽象化了。
以前的專案常常看到這種東西:C:\libs\boost_1_80\include、D:\3rdparty\openssl\lib。函式庫放在哪、版本是哪一版,全都綁死在某台電腦、或某組特定路徑,非常沒有彈性。
用了套件管理器之後,專案裡只要寫「boost 1.80、openssl 3.x」,剩下就交給工具去處理。專案不用再依賴寫死的檔案路徑,也不再依賴某台特定的電腦,使用上更有彈性,不管是誰的電腦或是在 CI 伺服器,都能用同一份設定建起來。
所以聊了這麼久,Conan or Vcpkg 那到底該選哪一個?
老實說,各有優缺,看團隊。真正應該要問的是:哪套適合你們團隊每天的工作流程?
以下就用幾個問題,收斂一下這三十天的成果吧。
vcpkg 的整個 Port 生態系是建立在 CMake/MSBuild 之上的,雖然官方宣稱可以透過 CMake 匯出設定給其他 Build system 使用,但就是很麻煩。
相對的,Conan 就廣泛地支援了很多套建構系統。
先去 ConanCenter 和 vcpkg 的套件清單,搜一下你們公司正在用的函式庫吧。雖然大多數常見函式庫兩邊都有,但還是有一些函式庫只能在一邊找到。
官方套件可以幫團隊省下很多自己打包的時間心力,用套件管理器最大理由之一,就是為了省心省力的管理依賴,不是嗎?
兩套 Package Manager 上手的難度都不高,但是整體來說 Conan 的學習曲線更陡,熟練操作時需要的先備知識更多。 vcpkg 相對比較沒那麼複雜。
但是相對的,Conan 彈性更大,像是可以用版本範圍自動跟上修 bug 的小改版,python 語法的表達能力更強,可以撰寫複雜多樣的打包腳本。
還要問團隊對 CMake 與 Python 的熟悉度分佈如何。
兩套系統對套件管理的偏好完全相反。Conan 盡可能的鼓勵使用預編譯二進位檔,vcpkg 則是強烈偏好原始碼本機當場編譯。
你們團隊的內部函式庫多嗎?會頻繁發布嗎?需要常常全部從頭編譯嗎?還是只是久久更新一次?
如果內部函式庫的程式碼非常多,發布又頻繁,那麼 Conan 的預編譯二進位檔就有優勢。如果只是久久更新一次,那麼 vcpkg 可以免去維護套件伺服器的時間心力。
vcpkg 的基建成本非常低,通常不需要特別跑一台專用伺服器。一個共享網路硬碟或 S3 就夠了。
相對的,Conan 在公司的環境下通常需要維護一台 remote 伺服器,當做團隊內部函式庫的套件與二進位倉庫。小團隊用內建的 conan_server 就可以起步,人多了再換 Artifactory。
2023年我完成過一次鐵人系列賽,那時候我覺得鐵人賽超難。三年後又挑戰一次,我覺得更難了,因為女兒長大了,已經不是嬰兒了,育兒更忙碌了,根本超級難找出空檔時間來寫文章。
對了,這系列我宣稱不用 AI 來寫文章,這件事是真的,但是我有用 AI 來寫程式碼跟驗證結果,問了AI很多問題,過程中學到了超級多。然後這個系列寫到一半時,我發現 AI 生圖好有趣啊,所以你應該會看到文章中出現了好幾個風格完全不同的圖片系列,這是個人用各種不同 AI 隨性嘗試的成果。