Externes Projekt Modul
Hinweis: Die Funktionalität dieses Moduls wird durch Mesons Regeln zum Mischen von Build-Systemen bestimmt.
Dies ist ein experimentelles Modul, die API kann sich ändern.
Hinzugefügt 0.56.0
Dieses Modul ermöglicht das Erstellen von Code, der andere Build-Systeme als Meson verwendet. Dieses Modul ist dazu gedacht, Autotools-Subprojekte als Fallback zu erstellen, falls die Abhängigkeit nicht im System gefunden werden konnte (z.B. zu alte Distro-Version).
Das Projekt wird Out-of-Tree innerhalb des Meson-Build-Verzeichnisses kompiliert. Das Projekt wird auch innerhalb des Meson-Build-Verzeichnisses mit Make's DESTDIR-Funktion installiert. Während des Installationsschritts des Projekts wird diese DESTDIR wortwörtlich an den gewünschten Ort kopiert.
Externe Subprojekte können von Meson (Hauptprojekt oder andere Subprojekte) erstellte Bibliotheken über pkg-config nutzen, dank der von pkg.generate() generierten *-uninstalled.pc-Dateien.
Anforderungen an externe Build-Systeme
- Muss Out-of-Tree-Build unterstützen. Das Konfigurationsskript wird mit dem aktuellen Arbeitsverzeichnis innerhalb des Meson-Build-Verzeichnisses und nicht im Top-Quellverzeichnis des Subprojekts aufgerufen.
- Das Konfigurationsskript muss ein
Makefileim aktuellen Arbeitsverzeichnis generieren. - Das Konfigurationsskript muss gängige Verzeichnisse wie prefix, libdir usw. als Kommandozeilenargumente entgegennehmen.
- Das Konfigurationsskript muss gängige Umgebungsvariablen wie CFLAGS, CC usw. unterstützen.
- Der Kompilierungsschritt muss erkennen, wann ein Neukonfigurieren erforderlich ist, und dies transparent durchführen.
Bekannte Einschränkungen
- Ausführbare Dateien aus externen Projekten können nicht uninstalliert verwendet werden, da sie ihre Bibliotheken am endgültigen Ort installiert benötigen würden. Deshalb gibt es keine
find_program()-Methode. - Das Konfigurationsskript muss ein
Makefilegenerieren, andere Build-Systeme werden noch nicht unterstützt. - Beim Cross-Kompilieren kann das externe Subprojekt, wenn
PKG_CONFIG_SYSROOT_DIRin der Umgebung odersys_rootin den Crossfile-Eigenschaften gesetzt ist, keine von Meson über pkg-config erstellten Abhängigkeiten finden. Der Grund dafür ist, dass pkg-config und pkgconf beide den Sysroot-Pfad voranstellen zu-Iund-LArgumenten aus-uninstalled.pc-Dateien. Dies ist wohl ein Fehler, der in zukünftigen Versionen von pkg-config/pkgconf behoben werden könnte.
Seit 1.7.0 [Meson devenv][Commands.md#devenv] setzt PATH und LD_LIBRARY_PATH, um Programme ausführen zu können.
Funktionen
add_project()
Diese Funktion sollte im Stammverzeichnis eines Projekts aufgerufen werden, das ein anderes Build-System verwendet. Normalerweise in einer meson.build-Datei im Stammverzeichnis eines Subprojekts, aber es kann auch in jedem Unterverzeichnis sein.
Sein erstes positionelles Argument ist der Name des auszuführenden Konfigurationsskripts (z.B. configure), diese Datei muss sich im aktuellen Verzeichnis befinden und ausführbar sein. Beachten Sie, dass, wenn ein Bootstrap-Skript erforderlich ist (z.B. autogen.sh beim Erstellen aus einem Git-Repository anstelle eines Tarballs), dies mit run_command() vor dem Aufruf der Methode add_project() erfolgen kann.
Seit 0.60.0 Wenn das erste positionelle Argument 'waf' ist, wird für das waf-Build-System eine spezielle Behandlung vorgenommen. Die Waf-Executable muss entweder im aktuellen Verzeichnis oder im System-PATH gefunden werden.
Schlüsselwort-Argumente
-
configure_options: Ein Array von Strings, die als Argumente an das Konfigurationsskript übergeben werden. Einige spezielle Tags werden von Meson ersetzt, bevor sie an das Konfigurationsskript übergeben werden:@PREFIX@,@LIBDIR@und@INCLUDEDIR@. Beachten Sie, dasslibdirundincludedirPfade relativ zuprefixin Meson sind, aber einige Konfigurationsskripte absolute Pfade benötigen. In diesem Fall können sie als'--libdir=@PREFIX@/@LIBDIR@'übergeben werden. Seit 0.57.0 werden Standardargumente hinzugefügt, falls einige Tags nicht inconfigure_optionsgefunden werden:'--prefix=@PREFIX@','--libdir=@PREFIX@/@LIBDIR@'und'--includedir=@PREFIX@/@INCLUDEDIR@'. Zuvor galt es als fataler Fehler, diese nicht anzugeben. Seit 1.7.0 wurden@BINDIR@und das Standardargument'--bindir=@PREFIX@/@BINDIR@'hinzugefügt. -
cross_configure_options: Zusätzliche Optionen, die nur beim Cross-Kompilieren zuconfigure_optionshinzugefügt werden. Der spezielle Tag@HOST@wird durch'{}-{}-{}'.format(host_machine.cpu_family(), build_machine.system(), host_machine.system()ersetzt. Wenn weggelassen, ist der Standardwert['--host=@HOST@']. -
verbose: Wenn auftruegesetzt, wird die Ausgabe von Unterbefehlen, die zum Konfigurieren, Erstellen und Installieren des Projekts ausgeführt werden, auf Mesons stdout ausgegeben. -
env: Umgebungsvariablen zum Setzen, wie z.B.['NAME1=value1', 'NAME2=value2'], ein Wörterbuch oder einenvObjekt. -
depends: Seit 0.63.0 Gibt an, dass dieses Projekt von den angegebenen Zielen abhängt, die vor der Ausführung vonmakezum Erstellen dieses externen Projekts erstellt werden müssen. Dies sollte beispielsweise verwendet werden, wenn das externe Projekt gegen eine Meson-library()verknüpft wird, die dasconfigure-Skript über die von Meson generierte-uninstalled.pcpkg-config-Datei findet.
Gibt ein ExternalProject Objekt zurück
ExternalProject Objekt
Methoden
dependency(libname)
Gibt ein Abhängigkeitsobjekt zurück, das zum Erstellen von Zielen gegen eine Bibliothek aus dem externen Projekt verwendet werden kann.
Schlüsselwort-Argumente
-
subdirPfad relativ zuincludedir, der zum Header-Suchpfad hinzugefügt werden soll.
Beispiel meson.build Datei für ein Subprojekt
project('My Autotools Project', 'c',
meson_version : '>=0.56.0',
)
mod = import('unstable-external_project')
p = mod.add_project('configure',
configure_options : ['--prefix=@PREFIX@',
'--libdir=@LIBDIR@',
'--incdir=@INCLUDEDIR@',
'--enable-foo',
],
)
mylib_dep = p.dependency('mylib')
meson.override_dependency('mylib', mylib_dep)
Verwendung der Wrap-Datei
Meistens wird das Projekt als Subprojekt erstellt und mit einer .wrap-Datei abgerufen. In diesem Fall kann die benötigte einfache meson.build-Datei zur Erstellung des Subprojekts bereitgestellt werden, indem die Zeile patch_directory=mysubproject in der Wrap-Datei hinzugefügt und die Build-Definitionsdatei unter subprojects/packagefiles/mysubproject/meson.build platziert wird.
Die Ergebnisse der Suche sind