ビルドオプション

ほとんどの非自明なビルドでは、ユーザーが設定可能なオプションが必要です。たとえば、プログラムには、ビルド時に選択可能な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オプションには、enableddisabled、または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つの要素foobarの配列に設定されます。

文字列値にコンマを含める必要がある場合は、次のように適切なシェル引用符を使用して値を渡す必要があります。

$ 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がリンクに使用するプロセスの数を制限できます。

検索結果は次のとおりです。