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_file gibt einen absoluten Pfad zu einer bereits vorhandenen CMake-Toolchain-Datei an, die mit include() als letzte Anweisung der automatisch generierten CMake-Toolchain-Datei von Meson geladen wird. (neu in 0.56.0)
  • cmake_defaults ist ein Boolean, der angibt, ob Meson automatisch Standard-Toolchain-Variablen aus anderen Abschnitten (binaries, host_machine usw.) in der Maschinendatei generieren soll. Standardwerte werden immer durch Variablen überschrieben, die im Abschnitt [cmake] gesetzt sind. Der Standardwert ist true. (neu in 0.56.0)
  • cmake_skip_compiler_test ist ein Enum, das angibt, wann Meson automatisch Toolchain-Variablen generieren soll, um die CMake-Compiler-Sanity-Checks zu überspringen. Dies hat nur dann Auswirkungen, wenn cmake_defaults true ist. Unterstützte Werte sind always, never, dep_only. Der Standardwert ist dep_only. (neu in 0.56.0)
  • cmake_use_exe_wrapper ist ein Boolean, der steuert, ob der in [binaries] angegebene exe_wrapper zum Ausführen generierter ausführbarer Dateien in CMake-Unterprojekten verwendet werden soll. Diese Einstellung hat keine Auswirkungen, wenn der exe_wrapper nicht angegeben wurde. Der Standardwert ist true. (neu in 0.56.0)
  • java_home ist ein absoluter Pfad, der auf das Stammverzeichnis einer Java-Installation zeigt.
  • bindgen_clang_arguments ein 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

  1. Kommandozeile
  2. Maschinendatei
  3. 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