你編譯過一些有名的開源專案嗎?那你可能會注意到,很多有名的C++專案,編譯的時候都有很多選項可以設定。
以著名的加密函式庫 OpenSSL 作為例子,編譯的時候可以選 shared/no-shared 來決定要編譯成動態函式庫(DLL)或者靜態函式庫。還可以設定asm/no-asm來決定要不要啟用組合語言加速。或者下達no_async 來關閉非同步功能,才有辦法跑在嵌入式設備上。這些複雜的編譯選項開關,Conan 套件做的到嗎?到底我們能不能用 conan 來管理 OpenSSL 函式庫的同時,還套用複雜的編譯選項來滿足專案的特殊需求呢?
答案是可以:只要使用 Conan options。
今天我們就來研究一下 Conan options 這個東西。並且搞清楚以下問題:
今天的目標:
options 和 default_options
conan create 編出兩份套件,看看 package ID 有沒有變化首先我們以套件作者的身分,給 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。