Deaktivieren von Teilen des Builds

Diese Funktion ist seit Version 0.44.0 verfügbar.

Das Folgende ist ein üblicher Fragment, das in vielen Projekten zu finden ist

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)

Dies funktioniert gut, wird aber etwas unflexibel, wenn Sie diesen Teil des Builds optional machen möchten. Grundsätzlich läuft es darauf hinaus, if/else-Anweisungen um alle Zielaufrufe herum hinzuzufügen. Meson bietet eine einfachere Möglichkeit, dasselbe mit einem Disabler-Objekt zu erreichen.

Ein Disabler-Objekt wird mit der Funktion disabler erstellt

d = disabler()

Das Einzige, was Sie mit einem Disabler-Objekt tun können, ist zu fragen, ob es gefunden wurde

f = d.found() # returns false

Jede andere Anweisung, die ein Disabler-Objekt verwendet, gibt sofort einen Disabler zurück. Angenommen, d enthält beispielsweise ein Disabler-Objekt, dann

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

Somit können Sie, um jedes Ziel zu deaktivieren, das von der oben genannten Abhängigkeit abhängt, Folgendes tun

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

Dies konzentriert die Handhabung dieser Option an einem Ort, und andere Build-Definitionsdateien müssen nicht mit if-Anweisungen übersät werden.

Die Ergebnisse der Suche sind