ビルドの一部を無効にする

この機能はバージョン0.44.0から利用できます。

次の項目は多くのプロジェクトで見つかる一般的なフラグメントです

dep = dependency('foo')

# In some different directory

lib = shared_library('mylib', 'mylib.c',
  dependencies : dep)

# And in a third directory

exe = executable('mytest', 'mytest.c',
  link_with : lib)
test('mytest', exe)

これは適切に機能しますが、この部分をビルドのオプションにしたい場合は、少し柔軟性が損なわれます。基本的に、すべてのターゲット呼び出しの周りにif/elseステートメントを加えることに帰着します。Mesonは無効化オブジェクトを使用して、同じことをより簡単に実現する方法を提供します。

無効化オブジェクトはdisabler関数で作成されます

d = disabler()

無効化オブジェクトに対してできることは、それが検出されたかどうかを尋ねるだけです

f = d.found() # returns false

無効化オブジェクトを使用する他のステートメントは、すぐに無効化を返します。たとえば、dに無効化オブジェクトが含まれているとします。次のようになります

d2 = some_func(d) # value of d2 will be disabler
d3 = true or d2   # value of d3 will be true because of short-circuiting
d4 = false or d2  # value of d4 will be disabler
if d              # neither branch is evaluated

したがって、上記の依存関係に依存するすべてのターゲットを無効にするには、次のようなことができます

if use_foo_feature
  d = dependency('foo')
else
  d = disabler()
endif

これにより、このオプションの処理が1か所に集中し、他のビルド定義ファイルにifステートメントが散らばる必要はありません。

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