Referenz für Cross- und Native-Dateien
Cross- und native Dateien sind nahezu identisch, aber nicht vollständig. Dies ist die Dokumentation zu den gemeinsamen Werten, die von beiden verwendet werden. Spezifische Werte für die eine oder andere finden Sie unter Cross-Kompilierung und native Umgebungen.
Geändert in 0.56.0 Schlüssel innerhalb von Abschnitten sind jetzt case-sensitiv. Dies ist erforderlich, damit Projektoptionen korrekt funktionieren.
Datentypen
Es gibt vier grundlegende Datentypen in einer Maschinendatei
- Zeichenketten
- Arrays
- Booleans
- Ganzzahlen
Eine Zeichenkette wird in einfache Anführungszeichen gesetzt
[section]
option1 = 'false'
option2 = '2'
Ein Array wird in eckige Klammern eingeschlossen und muss aus Zeichenketten oder Booleans bestehen
[section]
option = ['value']
Ein Boolean muss entweder true oder false sein und unquoted.
option = false
Eine Ganzzahl muss eine unquoted numerische Konstante sein.
option = 42
Abschnitte
Die folgenden Abschnitte sind zulässig
- Konstanten
- Binaries
- Pfade
- Eigenschaften
- cmake
- Projektoptionen
- Eingebaute Optionen
Konstanten
Seit 0.56.0
Zeichenketten- und Listenverkettung wird über den Operator + unterstützt, das Zusammenfügen von Pfaden über den Operator /. Einträge, die im Abschnitt [constants] definiert sind, können in jedem anderen Abschnitt verwendet werden (sie werden immer zuerst geparst), Einträge in jedem anderen Abschnitt können nur innerhalb desselben Abschnitts und nur nach ihrer Definition verwendet werden.
[constants]
toolchain = '/toolchain'
common_flags = ['--sysroot=' + toolchain / 'sysroot']
[properties]
c_args = common_flags + ['-DSOMETHING']
cpp_args = c_args + ['-DSOMETHING_ELSE']
[binaries]
c = toolchain / 'gcc'
Dies kann auch bei der Komposition von Cross-Dateien nützlich sein. Eine generische Cross-Datei könnte mit einer plattformspezifischen Datei kombiniert werden, in der Konstanten definiert sind
# aarch64.ini
[constants]
arch = 'aarch64-linux-gnu'
# cross.ini
[binaries]
c = arch + '-gcc'
cpp = arch + '-g++'
strip = arch + '-strip'
pkg-config = arch + '-pkg-config'
...
Dies kann als meson setup --cross-file aarch64.ini --cross-file cross.ini builddir verwendet werden.
Beachten Sie, dass die Dateikomposition vor dem Parsen von Werten erfolgt. Das folgende Beispiel führt dazu, dass b 'HelloWorld' ist
# file1.ini:
[constants]
a = 'Foo'
b = a + 'World'
#file2.ini:
[constants]
a = 'Hello'
Das folgende Beispiel führt zu einem Fehler, wenn file1.ini vor file2.ini inkludiert wird, da b vor a definiert würde
# file1.ini:
[constants]
b = a + 'World'
#file2.ini:
[constants]
a = 'Hello'
Seit 1.3.0 Einige Token werden in der Maschinendatei ersetzt, bevor sie geparst wird
-
@GLOBAL_SOURCE_ROOT@: der absolute Pfad zum Quellbaum des Projekts -
@DIRNAME@: der absolute Pfad zum übergeordneten Verzeichnis der Maschinendatei.
Es kann zum Beispiel verwendet werden, um Pfade relativ zum Quellverzeichnis oder relativ zum Installationsverzeichnis der Toolchain zu haben.
[binaries]
c = '@DIRNAME@/toolchain/gcc'
exe_wrapper = '@GLOBAL_SOURCE_ROOT@' / 'build-aux' / 'my-exe-wrapper.sh'
Binaries
Der Abschnitt Binaries enthält eine Liste von Binaries. Diese können intern von Meson oder von der Funktion find_program verwendet werden.
Diese Werte müssen entweder Zeichenketten oder ein Array von Zeichenketten sein
Compiler und Linker werden hier mit <lang> und <lang>_ld definiert. <lang>_ld ist besonders, da es compilerspezifisch ist. Für Compiler wie gcc und clang, die zum Aufrufen des Linkers verwendet werden, ist dies ein Wert, der an deren Argument zum "Wählen des Linkers" übergeben wird (in diesem Fall -fuse-ld=). Für Compiler wie MSVC und Clang-Cl ist dies der Pfad zu einem Linker, den Meson aufrufen soll, wie z. B. link.exe oder lld-link.exe. Die Unterstützung für ld ist neu in 0.53.0
geändert in 0.53.1 die Variable ld wurde durch <lang>_ld ersetzt, da sie eine große Anzahl von Projekten zurückgesetzt hat. In 0.53.0 wurde stattdessen die Variable ld verwendet.
Native Beispiel
c = '/usr/bin/clang'
c_ld = 'lld'
sed = 'C:\\program files\\gnu\\sed.exe'
llvm-config = '/usr/lib/llvm8/bin/llvm-config'
Cross-Beispiel
c = ['ccache', '/usr/bin/i586-mingw32msvc-gcc']
cpp = ['ccache', '/usr/bin/i586-mingw32msvc-g++']
c_ld = 'gold'
cpp_ld = 'gold'
ar = '/usr/i586-mingw32msvc/bin/ar'
strip = '/usr/i586-mingw32msvc/bin/strip'
pkg-config = '/usr/bin/i586-mingw32msvc-pkg-config'
Eine unvollständige Liste von intern verwendeten Programmen, die hier überschrieben werden können, ist
- cmake
- cups-config
- gnustep-config
- gpgme-config
- libgcrypt-config
- libwmf-config
- llvm-config
- pcap-config
- pkg-config
- sdl2-config
- wx-config (oder wx-3.0-config oder wx-config-gtk)
Pfade und Verzeichnisse
Veraltet in 0.56.0 Verwenden Sie stattdessen den eingebauten Abschnitt.
Ab 0.50.0 können Pfade und Verzeichnisse wie libdir in den nativen und Cross-Dateien in einem Pfad-Abschnitt definiert werden. Diese sollten Zeichenketten sein.
[paths]
libdir = 'mylibdir'
prefix = '/my prefix'
Diese Werte werden nur geladen, wenn keine Cross-Kompilierung stattfindet. Alle Argumente auf der Kommandozeile überschreiben alle Optionen in der nativen Datei. Zum Beispiel führt die Übergabe von --libdir=otherlibdir zu einem Präfix von /my prefix und einem libdir von otherlibdir.
Eigenschaften
Neu in nativen Dateien ab 0.54.0, immer in Cross-Dateien.
Zusätzlich zu speziellen Daten, die in Cross-Dateien angegeben werden können, kann dieser Abschnitt beliebige Schlüssel-Wert-Paare enthalten, auf die über meson.get_external_property() oder meson.get_cross_property() zugegriffen wird.
Geändert in 0.56.0 Das Platzieren von <lang>_args und <lang>_link_args im Abschnitt Eigenschaften wurde veraltet und sollte in den Abschnitt eingebaute Optionen verschoben werden.
Unterstützte Eigenschaften
Dies ist eine nicht erschöpfende Liste von unterstützten Variablen im Abschnitt [properties].
-
cmake_toolchain_filegibt einen absoluten Pfad zu einer bereits vorhandenen CMake-Toolchain-Datei an, die mitinclude()als letzte Anweisung der automatisch generierten CMake-Toolchain-Datei von Meson geladen wird. (neu in 0.56.0) -
cmake_defaultsist ein Boolean, der angibt, ob Meson automatisch Standard-Toolchain-Variablen aus anderen Abschnitten (binaries,host_machineusw.) in der Maschinendatei generieren soll. Standardwerte werden immer durch Variablen überschrieben, die im Abschnitt[cmake]gesetzt sind. Der Standardwert isttrue. (neu in 0.56.0) -
cmake_skip_compiler_testist ein Enum, das angibt, wann Meson automatisch Toolchain-Variablen generieren soll, um die CMake-Compiler-Sanity-Checks zu überspringen. Dies hat nur dann Auswirkungen, wenncmake_defaultstrueist. Unterstützte Werte sindalways,never,dep_only. Der Standardwert istdep_only. (neu in 0.56.0) -
cmake_use_exe_wrapperist ein Boolean, der steuert, ob der in[binaries]angegebeneexe_wrapperzum Ausführen generierter ausführbarer Dateien in CMake-Unterprojekten verwendet werden soll. Diese Einstellung hat keine Auswirkungen, wenn derexe_wrappernicht angegeben wurde. Der Standardwert isttrue. (neu in 0.56.0) -
java_homeist ein absoluter Pfad, der auf das Stammverzeichnis einer Java-Installation zeigt. -
bindgen_clang_argumentsein Array von zusätzlichen Argumenten, die an clang übergeben werden, wenn bindgen aufgerufen wird
CMake-Variablen
Neu in 0.56.0
Alle im Abschnitt [cmake] gesetzten Variablen werden zur generierten CMake-Toolchain-Datei hinzugefügt, die sowohl für CMake-Abhängigkeiten als auch für CMake-Unterprojekte verwendet wird. Der Typ jedes Eintrags muss entweder eine Zeichenkette oder eine Liste von Zeichenketten sein.
Hinweis: Alle Vorkommen von \ im Wert aller Schlüssel werden durch ein / ersetzt, da CMake viele Probleme mit der korrekten Maskierung von \ bei der Verarbeitung von Variablen hat (selbst in Fällen, in denen ein Pfad in CMAKE_C_COMPILER korrekt maskiert ist, wird CMake intern trotzdem Probleme haben, zum Beispiel)
A custom toolchain file should be used (via the `cmake_toolchain_file`
property) if `\` support is required.
[cmake]
CMAKE_C_COMPILER = '/usr/bin/gcc'
CMAKE_CXX_COMPILER = 'C:\\usr\\bin\\g++'
CMAKE_SOME_VARIABLE = ['some', 'value with spaces']
Zum Beispiel wird der Abschnitt [cmake] von oben den folgenden Code in der CMake-Toolchain-Datei generieren
set(CMAKE_C_COMPILER "/usr/bin/gcc")
set(CMAKE_CXX_COMPILER "C:/usr/bin/g++")
set(CMAKE_SOME_VARIABLE "some" "value with spaces")
Projektspezifische Optionen
Neu in 0.56.0
Pfadoptionen sind nicht zulässig, diese müssen im Abschnitt [paths] gesetzt werden.
Die Möglichkeit, projektspezifische Optionen in einer Cross- oder nativen Datei zu setzen, kann über den Abschnitt [project options] der spezifischen Datei erfolgen (bei einer Cross-Build wird die Option aus der nativen Datei ignoriert).
Für das Setzen von Optionen in Unterprojekten verwenden Sie stattdessen den Abschnitt [<subproject>:project options].
[project options]
build-tests = true
[zlib:project options]
build-tests = false
Meson eingebaute Optionen
Vor 0.56.0 mussten <lang>_args und <lang>_link_args stattdessen im Abschnitt properties platziert werden, sonst wurden sie ignoriert.
Meson eingebaute Optionen können auf die gleiche Weise gesetzt werden
[built-in options]
c_std = 'c99'
Sie können einige Meson eingebaute Optionen pro Unterprojekt setzen, wie z. B. default_library und werror. Die Reihenfolge der Priorität ist
- Kommandozeile
- Maschinendatei
- Buildsystem-Definitionen
[zlib:built-in options]
default_library = 'static'
werror = false
Optionen, die pro Unterprojekt gesetzt werden, erben die Option vom Elternteil, wenn der Elternteil eine Einstellung hat, das Unterprojekt aber nicht, auch wenn ein Standardwert in der Meson-Sprache festgelegt ist.
[built-in options]
default_library = 'static'
führt dazu, dass Unterprojekte default_library als statisch verwenden.
Einige Optionen können pro Maschine gesetzt werden (mit anderen Worten, der Wert der Build-Maschine kann sich von der Host-Maschine bei einer Cross-Kompilierung unterscheiden). In diesen Fällen werden die Werte sowohl aus einer Cross-Datei als auch aus einer nativen Datei verwendet.
Eine unvollständige Liste von Optionen ist
- pkg_config_path
- cmake_prefix_path
Mehrere Maschinendateien laden
Native Dateien erlauben Layering (Cross-Dateien können seit Meson 0.52.0 geschichtet werden). Mehr als eine Datei kann geladen werden, wobei Werte aus einer vorherigen Datei durch die nächste überschrieben werden. Die Absicht dahinter ist nicht das Überschreiben, sondern das Komponieren von Dateien. Diese Komposition erfolgt durch mehrmaliges Übergeben des Kommandozeilenarguments
meson setup builddir/ --cross-file first.ini --cross-file second.ini --cross-file third.ini
In diesem Fall wird first.ini geladen, dann second.ini, wobei Werte aus second.ini first.ini ersetzen und so weiter.
Wenn zum Beispiel ein Projekt C und C++, Python 3.4-3.7 und LLVM 5-7 verwendet und mit clang 5, 6 und 7 sowie gcc 5.x, 6.x und 7.x erstellt werden muss; die Darstellung all dieser Konfigurationen in monolithischen Konfigurationen würde zu 81 verschiedenen nativen Dateien führen. Durch das Schichten können diese mit nur 12 nativen Dateien ausgedrückt werden.
Die Ergebnisse der Suche sind