iT邦幫忙

2026 iThome 鐵人賽

DAY 17
0
Software Development

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

D17:自己定義 Conan options,編譯套件也能選配

  • 分享至 

  • xImage
  •  

你編譯過一些有名的開源專案嗎?那你可能會注意到,很多有名的C++專案,編譯的時候都有很多選項可以設定。

以著名的加密函式庫 OpenSSL 作為例子,編譯的時候可以選 shared/no-shared 來決定要編譯成動態函式庫(DLL)或者靜態函式庫。還可以設定asm/no-asm來決定要不要啟用組合語言加速。或者下達no_async 來關閉非同步功能,才有辦法跑在嵌入式設備上。這些複雜的編譯選項開關,Conan 套件做的到嗎?到底我們能不能用 conan 來管理 OpenSSL 函式庫的同時,還套用複雜的編譯選項來滿足專案的特殊需求呢?

答案是可以:只要使用 Conan options。

今天我們就來研究一下 Conan options 這個東西。並且搞清楚以下問題:

  1. 我們自己編寫套件的時候,要怎麼加入選項?
  2. 使用別人的套件的時候,要怎麼設定選項?

今天的目標:

  1. 在 recipe 裡宣告 options 和 default_options
  2. 把選項從 Conan 傳到 CMake,再傳進 C++ 原始碼
  3. 用 conan create 編出兩份套件,看看 package ID 有沒有變化

第一步:替 hello 加一個選項吧!

首先我們以套件作者的身分,給 D16 的 hello/1.0 自己加一個編譯選項。

做個簡單的開關:loud=False 時印原本的招呼,loud=True 時改成大聲版。

這是昨天的 hello/ 專案。

在 hello/conanfile.py 的 settings 下面加兩行:

    settings = "os", "compiler", "build_type", "arch"
    options = {"loud": [True, False]}
    default_options = {"loud": False}
    exports_sources = "CMakeLists.txt", "src/*", "include/*"

options 告訴 Conan:這個套件有個叫 loud 的選項,只接受 True 或 False。default_options 告訴 Conan:使用者沒指定時,選 False。


上一篇
D16:conan create 成功,套件就能用了嗎?談 test_package 的用途
系列文
C++ 套件管理器求生指南 Conan vs Vcpkg 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言