Installieren
Aufgerufen über den folgenden Befehl (verfügbar seit 0.47.0)
meson install
oder alternativ (bei älteren Meson-Versionen mit ninja Backend)
ninja install
Standardmäßig installiert Meson nichts. Build-Ziele können durch Markierung als installierbar in der Definition installiert werden.
project('install', 'c')
shared_library('mylib', 'libfile.c', install : true)
Normalerweise ist es nicht notwendig, Installationspfade oder Ähnliches anzugeben. Meson installiert es automatisch an den standardkonformen Speicherort. In diesem speziellen Fall wird die ausführbare Datei in das Unterverzeichnis bin des Installationspräfixes installiert. Wenn Sie jedoch das Installationsverzeichnis überschreiben möchten, können Sie dies mit dem Argument install_dir tun.
executable('prog', 'prog.c', install : true, install_dir : 'my/special/dir')
Andere Installationsbefehle sind die folgenden.
install_headers('header.h', subdir : 'projname') # -> include/projname/header.h
install_man('foo.1') # -> share/man/man1/foo.1
install_data('datafile.dat', install_dir : get_option('datadir') / 'progname')
# -> share/progname/datafile.dat
install_data() unterstützt die Umbenennung der Datei seit 0.46.0.
# file.txt -> {datadir}/{projectname}/new-name.txt
install_data('file.txt', rename : 'new-name.txt')
# file1.txt -> share/myapp/dir1/data.txt
# file2.txt -> share/myapp/dir2/data.txt
install_data(['file1.txt', 'file2.txt'],
rename : ['dir1/data.txt', 'dir2/data.txt'],
install_dir : 'share/myapp')
Manchmal möchten Sie einen gesamten Unterbaum direkt kopieren. Für diesen Anwendungsfall gibt es den Befehl install_subdir, der wie folgt verwendet werden kann.
install_subdir('mydir', install_dir : 'include') # mydir subtree -> include/mydir
Meistens möchten Sie Dateien relativ zum Installationspräfix installieren. Manchmal müssen Sie außerhalb des Präfixes gehen (z. B. Dateien nach /etc anstatt nach /usr/etc schreiben). Dies kann durch Angabe eines absoluten Installationspfads erreicht werden.
install_data(sources : 'foo.dat', install_dir : '/etc') # -> /etc/foo.dat
Benutzerdefiniertes Installationsskript
Manchmal müssen Sie mehr tun, als nur grundlegende Ziele zu installieren. Meson macht dies einfach, indem es Ihnen erlaubt, ein benutzerdefiniertes Skript anzugeben, das zur Installationszeit ausgeführt wird. Als Beispiel hier ein Skript, das eine leere Datei in einem benutzerdefinierten Verzeichnis generiert.
#!/bin/sh
mkdir "${DESTDIR}/${MESON_INSTALL_PREFIX}/mydir"
touch "${DESTDIR}/${MESON_INSTALL_PREFIX}/mydir/file.dat"
Wie Sie sehen, richtet Meson einige Umgebungsvariablen ein, um Ihnen beim Schreiben Ihres Skripts zu helfen (DESTDIR wird nicht von Meson gesetzt, sondern aus der externen Umgebung geerbt). Zusätzlich zum Installationspräfix setzt Meson auch die Variablen MESON_SOURCE_ROOT und MESON_BUILD_ROOT.
Meson anzuweisen, dieses Skript zur Installationszeit auszuführen, ist eine Einzeiler.
meson.add_install_script('myscript.sh')
Das Argument ist der Name der Skriptdatei relativ zum aktuellen Unterverzeichnis.
Installation als Superuser
Beim Erstellen als Nicht-Root-Benutzer, aber bei der Installation in Root-besessene Speicherorte über z. B. sudo ninja install, versucht Ninja, veraltete Ziele als Root neu zu erstellen. Dies führt zu verschiedenen Fehlverhalten aufgrund von Build-Ausgaben und Ninja-internen Dateien, die Root gehören.
Die Ausführung von meson install wird aus mehreren Gründen bevorzugt. Es kann veraltete Ziele neu erstellen und sich dann als Root erneut aufrufen. (seit 1.1.0) Zusätzlich wird beim Ausführen von sudo meson install die Berechtigung entzogen und veraltete Ziele als ursprünglicher Benutzer neu erstellt, nicht als Root.
(seit 1.1.0) Beim erneuten Aufruf als Root wird versucht, die bevorzugte Methode des Benutzers zum erneuten Ausführen von Befehlen als Root zu erraten. Die Reihenfolge der Priorität ist: sudo, doas, pkexec (polkit). Ein Berechtigungstool kann durch Setzen von $MESON_ROOT_CMD erzwungen werden.
DESTDIR-Unterstützung
Manchmal müssen Sie in ein anderes Verzeichnis als das Installationspräfix installieren. Dies ist am häufigsten beim Erstellen von RPM- oder DEB-Paketen der Fall. Dies geschieht mit der Umgebungsvariable DESTDIR und wird genauso verwendet wie bei anderen Build-Systemen.
$ DESTDIR=/path/to/staging/area meson install
Seit 0.57.0 kann das Argument --destdir anstelle der Umgebungsvariable verwendet werden. In diesem Fall setzt Meson DESTDIR in die Umgebung, wenn Installationsskripte ausgeführt werden.
Seit 0.60.0 kann DESTDIR und --destdir ein Pfad relativ zum Build-Verzeichnis sein. Ein absoluter Pfad wird in die Umgebung gesetzt, wenn Skripte ausgeführt werden.
Benutzerdefiniertes Installationsverhalten
Das Installationsverhalten kann durch zusätzliche Argumente weiter angepasst werden.
Wenn Sie beispielsweise das aktuelle Setup installieren möchten, ohne den Code neu zu erstellen (was das Standard-Installationsziel immer tut) und nur die geänderten Dateien installieren, würden Sie diesen Befehl im Build-Verzeichnis ausführen
$ meson install --no-rebuild --only-changed
Installations-Tags
Seit 0.60.0
Es ist möglich, nur eine Teilmenge der installierbaren Dateien mit dem Befehl meson install --tags tag1,tag2 zu installieren. Wenn --tags angegeben ist, werden nur Dateien installiert, die mit einem der Tags markiert wurden.
Dies ist für Packager (z. B. Distributionen) gedacht, die typischerweise die Pakete libfoo, libfoo-dev und libfoo-doc aufteilen möchten. Anstatt die Liste der installierten Dateien pro Kategorie in jedem Verpackungssystem zu duplizieren, kann sie an einem einzigen Ort, direkt in den Upstream meson.build-Dateien, gepflegt werden.
Meson setzt vordefinierte Tags auf einige Dateien. Im Laufe der Zeit werden wahrscheinlich weitere Tags hinzugefügt. Bitte helfen Sie mit, die Liste der bekannten Kategorien zu erweitern.
-
devel:-
static_library(), -
install_headers(), -
pkgconfig.generate(), -
gnome.generate_gir()-.gir-Datei, -
gnome.generate_vapi()-.vapi-Datei (Seit 0.64.0), - Dateien, die in
libdirund mit der Erweiterung.aoder.pcinstalliert werden, - Datei, die in
includedirinstalliert wird, - Generierte Header-Dateien, die mit
gnome.compile_resources(),gnome.genmarshal(),gnome.mkenums(),gnome.mkenums_simple()undgnome.gdbus_codegen()installiert werden (Seit 0.64.0).
-
-
runtime:-
executable(), -
shared_library(), -
shared_module(), -
jar(), -
gnome.compile_resources()-.gresource-Datei (Seit 0.64.0), - Dateien, die in
bindirinstalliert werden, - Dateien, die in
libdirund mit der Erweiterung.sooder.dllinstalliert werden.
-
-
python-runtime:-
python.install_sources().
-
-
man: -
doc:-
gnome.gtkdoc(), -
gnome.yelp(), -
hotdoc.generate_doc().
-
-
i18n:-
i18n.gettext(), -
qt.compile_translations(), - Dateien, die in
localedirinstalliert werden.
-
-
typelib:-
gnome.generate_gir()-.typelib-Datei.
-
-
bin:- Skripte und ausführbare Dateien, die mit einer Bibliothek gebündelt sind und von Endbenutzern verwendet werden sollen.
-
bin-devel:- Skripte und ausführbare Dateien, die mit einer Bibliothek gebündelt sind und von Entwicklern verwendet werden sollen (d. h. Build-Tools).
-
tests:- Dateien, die in das Unterverzeichnis
installed-testsinstalliert werden (Seit 0.64.0).
- Dateien, die in das Unterverzeichnis
-
systemtap:- Dateien, die in das Unterverzeichnis
systemtapinstalliert werden (Seit 0.64.0).
- Dateien, die in das Unterverzeichnis
Ein benutzerdefiniertes Installations-Tag kann mit dem Schlüsselwortargument install_tag bei verschiedenen Funktionen wie custom_target(), configure_file(), install_subdir() und install_data() gesetzt werden. Details finden Sie in der jeweiligen Dokumentation im Referenzhandbuch. Es wird empfohlen, nach Möglichkeit eines der vordefinierten Tags zu verwenden.
Installierbare Dateien, die weder automatisch von Meson getaggt noch manuell mit dem Schlüsselwortargument install_tag getaggt wurden, werden nicht installiert, wenn --tags verwendet wird. Sie werden am Ende von <builddir>/meson-logs/meson-log.txt gemeldet. Es wird empfohlen, fehlende install_tag hinzuzufügen, um jedes installierbare Element zu taggen.
Die Ergebnisse der Suche sind