ビルドオプション
ほとんどの非自明なビルドでは、ユーザーが設定可能なオプションが必要です。たとえば、プログラムには、ビルド時に選択可能な2つの異なるデータバックエンドがある場合があります。 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
の3つの状態があります。ほとんどの関数の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
機能の値を確認するために、オブジェクトにはブール値を返し、引数を取らない3つのメソッドがあります。
.enabled()
.disabled()
.auto()
これは、機能に依存するカスタムコードに役立ちます。
if get_option('myfeature').enabled()
# ...
endif
feature
オプションの値がauto
に設定されている場合、その値はグローバルauto_features
オプション(デフォルトはauto
)によってオーバーライドされます。これは、どの依存関係が必要でどれが無効になっているかを完全に制御し、ビルド依存関係がインストールされている(正しいバージョンで)ことに依存して機能を有効にしないようにしたいパッケージャーが使用することを目的としています。必要に応じて、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
値は2つの要素foo
とbar
の配列に設定されます。
文字列値にコンマを含める必要がある場合は、次のように適切なシェル引用符を使用して値を渡す必要があります。
$ 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がリンクに使用するプロセスの数を制限できます。
検索結果は次のとおりです。