Build-Optionen
Die meisten nicht-trivialen Builds erfordern vom Benutzer einstellbare Optionen. Als Beispiel kann ein Programm zwei verschiedene Daten-Backends haben, die zur Build-Zeit auswählbar sind. Meson bietet hierfür eine Optionsdefinitionsdatei. Diese heißt meson.options und liegt im Stammverzeichnis deines Quellcodes. Für Meson-Versionen vor 1.1 hieß diese Datei meson_options.txt.
Hier ist eine einfache Optionsdatei.
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
Für eingebaute Optionen siehe Eingebaute Optionen.
Build-Optionstypen
Alle Typen erlauben das Setzen eines description-Werts, der die Option beschreibt. Wenn keine Beschreibung gesetzt ist, wird stattdessen der Name der Option verwendet.
Strings
Der String-Typ ist ein frei formulierter String. Wenn der Standardwert nicht gesetzt ist, wird ein leerer String als Standard verwendet.
Booleans
Booleans können die Werte true oder false haben. Wenn kein Standardwert angegeben wird, wird true als Standard verwendet.
Combos
Ein Combo erlaubt die Auswahl eines beliebigen Wertes aus dem choices-Parameter. Wenn kein Standardwert gesetzt ist, ist der erste Wert der Standard.
Integers
Eine Integer-Option enthält eine einzelne Ganzzahl mit optionalen oberen und unteren Werten, die mit den Schlüsselwortargumenten min und max angegeben werden.
Dieser Typ ist seit Meson Version 0.45.0 verfügbar.
Arrays
Arrays repräsentieren ein Array von Strings. Standardmäßig kann das Array beliebige Strings enthalten. Um die möglichen Werte einzuschränken, setze den choices-Parameter. Meson erlaubt dann nur, dass das Array Strings enthält, die in der gegebenen Liste stehen. Das Array kann leer sein. Der value-Parameter gibt den Standardwert der Option an. Wenn er nicht gesetzt ist, werden die Werte von choices als Standard verwendet.
Ab Version 0.47.0 übergeben sowohl -Dopt= als auch -Dopt=[] eine leere Liste. Davor übergab -Dopt= eine Liste mit einem leeren String.
Dieser Typ ist seit Version 0.44.0 verfügbar.
Features
Eine feature-Option hat drei Zustände: enabled, disabled oder auto. Sie ist dazu gedacht, als Wert für das required-Schlüsselwortargument der meisten Funktionen übergeben zu werden. Derzeit unterstützt in den Funktionen add_languages(), compiler.find_library(), compiler.has_header(), dependency(), find_program(), import() und subproject().
-
enabledist gleichbedeutend mit der Übergabe vonrequired : true. -
autoist gleichbedeutend mit der Übergabe vonrequired : false. -
disabledsucht nicht nach der Abhängigkeit und gibt immer 'not-found' zurück.
Beim Abrufen des Wertes dieses Optionstyps mit get_option() wird anstelle der String-Darstellung des Optionswerts ein spezielles feature-Objekt zurückgegeben. Dieses Objekt kann an required übergeben werden.
d = dependency('foo', required : get_option('myfeature'))
if d.found()
app = executable('myapp', 'main.c', dependencies : [d])
endif
Um den Wert des Features zu prüfen, hat das Objekt drei Methoden, die einen booleschen Wert zurückgeben und keine Argumente entgegennehmen:
.enabled().disabled().auto()
Dies ist nützlich für benutzerdefinierten Code, der von dem Feature abhängt.
if get_option('myfeature').enabled()
# ...
endif
Wenn der Wert einer feature-Option auf auto gesetzt ist, wird dieser Wert von der globalen auto_features-Option (die standardmäßig auf auto gesetzt ist) überschrieben. Dies ist für Paketierer gedacht, die die volle Kontrolle darüber haben möchten, welche Abhängigkeiten erforderlich sind und welche deaktiviert werden, und sich nicht auf Build-Abhängigkeiten verlassen wollen, die (in der richtigen Version) installiert sind, um ein Feature zu aktivieren. Sie könnten auto_features=enabled setzen, um alle Features zu aktivieren und explizit nur die wenigen zu deaktivieren, die sie nicht wollen, falls vorhanden.
Dieser Typ ist seit Version 0.47.0 verfügbar.
Veraltete Optionen
Seit 0.60.0
Projektoptionen können als veraltet markiert werden, und Meson warnt, wenn der Benutzer einen Wert dafür setzt. Es ist auch möglich, nur einige der Wahlmöglichkeiten zu veralten und veraltete Werte auf einen neuen Wert abzubilden.
# 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'})
Seit 0.63.0 kann das Schlüsselwortargument deprecated den Namen einer neuen Option annehmen, die diese Option ersetzt. In diesem Fall wird beim Setzen eines Werts für die veraltete Option der Wert sowohl für den alten als auch für den neuen Namen gesetzt, vorausgesetzt, sie akzeptieren dieselben Werte.
# 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')
Verwendung von Build-Optionen
optval = get_option('opt_name')
Diese Funktion erlaubt Ihnen auch, den Wert der integrierten Projektoptionen von Meson abzufragen. Um beispielsweise das Installationspräfix zu erhalten, würden Sie den folgenden Befehl ausführen:
prefix = get_option('prefix')
Es ist zu beachten, dass Sie Optionswerte nicht in Ihren Meson-Skripten setzen können. Sie müssen extern mit dem Kommandozeilenwerkzeug meson configure gesetzt werden. Wenn Sie meson configure ohne Argumente in einem Build-Verzeichnis ausführen, werden Ihnen alle Optionen angezeigt, die Sie setzen können.
Um ihre Werte zu ändern, verwenden Sie die Option -D
$ meson configure -Doption=newvalue
Das Setzen des Werts von Arrays ist etwas Besonderes. Wenn Sie nur einen einzelnen String übergeben, wird dieser als alle Werte getrennt durch Kommas betrachtet. Das Aufrufen des folgenden Befehls
$ meson configure -Darray_opt=foo,bar
würde den Wert auf ein Array von zwei Elementen setzen: foo und bar.
Wenn Sie Kommas in Ihren String-Werten haben möchten, müssen Sie den Wert mit korrekten Shell-Anführungszeichen übergeben, wie hier:
$ meson configure "-Doption=['a,b', 'c,d']"
Die inneren Werte müssen immer einfache Anführungszeichen und die äußeren doppelte Anführungszeichen sein.
Um Werte in Unterprojekten zu ändern, stellen Sie dem Namen des Unterprojekts und einem Doppelpunkt voran:
$ meson configure -Dsubproject:option=newvalue
HINWEIS: Wenn Sie meson configure nicht aufrufen können, haben Sie wahrscheinlich eine alte Version von Meson. In diesem Fall können Sie stattdessen mesonconf aufrufen, dies ist jedoch in neueren Versionen veraltet.
Weitergabe an Superprojekt-Option
Angenommen, Sie haben ein Hauptprojekt und ein Unterprojekt. In einigen Fällen kann es nützlich sein, eine Option zu haben, die in beiden denselben Wert hat. Dies kann mit dem yield-Schlüsselwort erreicht werden. Angenommen, Sie haben eine Optionsdefinition wie diese:
option('some_option', type : 'string', value : 'value', yield : true)
Wenn Sie dieses Projekt isoliert bauen, verhält sich diese Option wie gewohnt. Wenn Sie dieses Projekt jedoch als Unterprojekt eines anderen Projekts bauen, das ebenfalls eine Option namens some_option hat, gibt der Aufruf von get_option den Wert des Superprojekts zurück. Wenn der Wert von yield false ist, gibt get_option den Wert der Option des Unterprojekts zurück.
Eingebaute Build-Optionen
Es gibt eine Reihe von eingebauten Optionen. Um die aktuelle Liste zu erhalten, führen Sie meson configure im Build-Verzeichnis aus.
Visual Studio
Startprojekt
Die Option backend_startup_project kann gesetzt werden, um das Standardprojekt zu definieren, das mit der Aktion "Debuggen starten F5" in Visual Studio ausgeführt wird. Es sollte denselben Namen wie ein ausführbares Ziel haben.
project('my_project', 'c', default_options: ['backend_startup_project=my_exe'])
executable('my_exe', ...)
Ninja
Maximale Links
backend_max_links kann gesetzt werden, um die Anzahl der Prozesse zu begrenzen, die Ninja zum Linken verwendet.
Die Ergebnisse der Suche sind