建構選項
大多數非簡單的建構都需要使用者設定的選項。舉例來說,一個程式可能在建構時有兩個不同的資料後端可供選擇。Meson 透過選項定義檔案來提供此功能。它的名稱是 meson.options
,並且放置在您的原始碼樹狀結構的根目錄。在 Meson 1.1 之前的版本中,這個檔案稱為 meson_options.txt
。
這是一個簡單的選項檔案。
option('someoption', type : 'string', value : 'optval', description : 'An option')
option('other_one', type : 'boolean', value : false)
option('combo_opt', type : 'combo', choices : ['one', 'two', 'three'], value : 'three')
option('integer_opt', type : 'integer', min : 0, max : 5, value : 3) # Since 0.45.0
option('free_array_opt', type : 'array', value : ['one', 'two']) # Since 0.44.0
option('array_opt', type : 'array', choices : ['one', 'two', 'three'], value : ['one', 'two'])
option('some_feature', type : 'feature', value : 'enabled') # Since 0.47.0
option('long_desc', type : 'string', value : 'optval',
description : 'An option with a very long description' +
'that does something in a specific context') # Since 0.55.0
關於內建選項,請參閱內建選項。
建構選項類型
所有類型都允許設定 description
值來描述該選項,如果沒有設定描述,則會改用選項的名稱。
字串
字串類型是一個自由格式的字串。如果沒有設定預設值,則會使用空字串作為預設值。
布林值
布林值可能的值為 true
或 false
。如果沒有提供預設值,則會使用 true
作為預設值。
組合
組合允許從 choices
參數中的任何一個值進行選擇。如果沒有設定預設值,則第一個值將會是預設值。
整數
整數選項包含一個單一整數,可選的上界和下界值可以使用 min
和 max
關鍵字參數指定。
此類型從 Meson 版本 0.45.0 開始可用。
陣列
陣列表示字串陣列。預設情況下,陣列可以包含任意字串。若要限制可能使用的值,請設定 choices
參數。Meson 屆時只會允許值陣列包含在給定清單中的字串。陣列可能為空。value
參數指定選項的預設值,如果沒有設定,則會使用 choices
的值作為預設值。
從 0.47.0 開始,-Dopt= 和 -Dopt=[] 都會傳遞一個空列表,在此之前 -Dopt= 會傳遞一個包含空字串的列表。
此類型從版本 0.44.0 開始可用
功能
feature
選項有三種狀態:enabled
、disabled
或 auto
。它旨在作為大多數函式的 required
關鍵字引數的值傳遞。目前在add_languages()
、compiler.find_library()
、compiler.has_header()
、dependency()
、find_program()
、import()
和 subproject()
函式中支援。
-
enabled
與傳遞required : true
相同。 -
auto
與傳遞required : false
相同。 -
disabled
不會尋找相依性,並且總是會回傳 'not-found'。
當使用 get_option()
取得此類型選項的值時,會回傳一個特殊的 feature
物件,而不是選項值的字串表示。此物件可以傳遞給 required
。
d = dependency('foo', required : get_option('myfeature'))
if d.found()
app = executable('myapp', 'main.c', dependencies : [d])
endif
若要檢查功能的值,該物件有三個方法會回傳布林值並且不接受任何引數。
.enabled()
.disabled()
.auto()
這對於依賴於功能的自訂程式碼很有用。
if get_option('myfeature').enabled()
# ...
endif
如果將 feature
選項的值設定為 auto
,則該值會被全域 auto_features
選項覆寫(預設為 auto
)。這旨在供封裝程式使用,它們希望完全控制需要哪些相依性以及停用哪些相依性,並且不依賴於已安裝的 build-deps(使用正確的版本)來啟用功能。它們可以設定 auto_features=enabled
來啟用所有功能,並僅顯式停用它們不想要的少數功能(如果有的話)。
此類型從版本 0.47.0 開始可用
已棄用的選項
從 0.60.0 開始
專案選項可以標記為已棄用,當使用者將值設定為該選項時,Meson 會發出警告。也可以僅棄用部分選擇,並將已棄用的值對應到新值。
# Option fully deprecated, it warns when any value is set.
option('o1', type: 'boolean', deprecated: true)
# One of the choices is deprecated, it warns only when 'a' is in the list of values.
option('o2', type: 'array', choices: ['a', 'b'], deprecated: ['a'])
# One of the choices is deprecated, it warns only when 'a' is in the list of values
# and replace it by 'c'.
option('o3', type: 'array', choices: ['a', 'b', 'c'], deprecated: {'a': 'c'})
# A boolean option has been replaced by a feature, old true/false values are remapped.
option('o4', type: 'feature', deprecated: {'true': 'enabled', 'false': 'disabled'})
# A feature option has been replaced by a boolean, enabled/disabled/auto values are remapped.
option('o5', type: 'boolean', deprecated: {'enabled': 'true', 'disabled': 'false', 'auto': 'false'})
從 0.63.0 開始,deprecated
關鍵字引數可以採用取代此選項的新選項的名稱。在這種情況下,在已棄用的選項上設定值將會在舊名稱和新名稱上設定值,假設它們接受相同的值。
# A boolean option has been replaced by a feature with another name, old true/false values
# are accepted by the new option for backward compatibility.
option('o6', type: 'boolean', value: 'true', deprecated: 'o7')
option('o7', type: 'feature', value: 'enabled', deprecated: {'true': 'enabled', 'false': 'disabled'})
# A project option is replaced by a module option
option('o8', type: 'string', value: '', deprecated: 'python.platlibdir')
使用建構選項
optval = get_option('opt_name')
此函式還允許您查詢 Meson 內建專案選項的值。例如,若要取得安裝前置路徑,您會發出以下命令
prefix = get_option('prefix')
應該注意的是,您不能在您的 Meson 指令碼中設定選項值。它們必須透過 meson configure
命令列工具在外部設定。在建構目錄中執行沒有引數的 meson configure
會顯示您可以設定的所有選項。
若要變更它們的值,請使用 -D
選項
$ meson configure -Doption=newvalue
設定陣列的值有點特別。如果您僅傳遞一個字串,則會認為它具有所有以逗號分隔的值。因此,呼叫以下命令
$ meson configure -Darray_opt=foo,bar
會將值設定為包含兩個元素的陣列,foo
和 bar
。
如果您的字串值中需要有逗號,則需要使用正確的 Shell 引號傳遞該值,如下所示
$ meson configure "-Doption=['a,b', 'c,d']"
內層的值必須始終是單引號,而外層的值則必須是雙引號。
若要變更子專案中的值,請在前面加上子專案的名稱和冒號
$ meson configure -Dsubproject:option=newvalue
注意: 如果您無法呼叫 meson configure
,則您可能有一個舊版本的 Meson。在這種情況下,您可以改為呼叫 mesonconf
,但在較新版本中已棄用。
服從超專案選項
假設您有一個主專案和一個子專案。在某些情況下,可能需要有一個在兩者中具有相同值的選項。這可以使用 yield
關鍵字來實現。假設您有如下的選項定義
option('some_option', type : 'string', value : 'value', yield : true)
如果您單獨建構此專案,則此選項的行為會像平常一樣。但是,如果您將此專案建構成另一個也具有名為 some_option
的選項的專案的子專案,則呼叫 get_option
會回傳超專案的值。如果 yield
的值為 false
,則 get_option
會回傳子專案選項的值。
內建建構選項
有許多內建選項。若要取得目前清單,請在建構目錄中執行 meson configure
。
Visual Studio
啟動專案
可以設定 backend_startup_project
選項來定義在 Visual Studio 中使用「開始偵錯 F5」動作時將會執行的預設專案。它應該與可執行目標名稱相同。
project('my_project', 'c', default_options: ['backend_startup_project=my_exe'])
executable('my_exe', ...)
Ninja
最大連結數
可以設定 backend_max_links
來限制 Ninja 將用於連結的程序數。
搜尋結果為