Kompilieren von D-Anwendungen
Meson unterstützt das Kompilieren von D-Programmen. Eine minimale meson.build-Datei für D sieht so aus:
project('myapp', 'd')
executable('myapp', 'app.d')
Bedingte Kompilierung
Wenn Sie die version()-Funktion für bedingte Kompilierung verwenden, können Sie diese über die Target-Eigenschaft d_module_versions nutzen.
project('myapp', 'd')
executable('myapp', 'app.d', d_module_versions: ['Demo', 'FeatureA'])
Für das Debugging werden debug()-Bedingungen in Debug-Builds automatisch kompiliert. Zusätzliche Bezeichner können mit dem Argument d_debug hinzugefügt werden.
project('myapp', 'd')
executable('myapp', 'app.d', d_debug: [3, 'DebugFeatureA'])
In declare_dependency
Seit Version 0.62.0 ist es bei der Deklaration eigener Abhängigkeiten mithilfe von declare_dependency möglich, Parameter für D-spezifische Features hinzuzufügen, z. B. um bedingte Kompilierungsversionen weiterzugeben.
my_dep = declare_dependency(
# ...
d_module_versions: ['LUA_53'],
d_import_dirs: include_directories('my_lua_folder'),
)
Akzeptierte D-spezifische Parameter sind d_module_versions und d_import_dirs (DMD -J Switch).
Einbettete Unittests verwenden
Wenn Sie eingebettete unittest-Funktionen verwenden, muss Ihr Quellcode zweimal kompiliert werden: einmal im regulären Modus und einmal mit aktivierten Unittests. Dies geschieht durch Setzen der Target-Eigenschaft d_unittest auf true. Meson übergibt immer nur das -unittest-Flag des jeweiligen Compilers und generiert nie eine leere main()-Funktion vom Compiler. Wenn Sie diese Funktion auf portable Weise benötigen, erstellen Sie selbst eine leere main()-Funktion für Unittests, da der GNU D-Compiler diese Funktion nicht hat.
Dies ist ein Beispiel für die Verwendung von D-Unittests mit Meson.
project('myapp_tested', 'd')
myapp_src = ['app.d', 'alpha.d', 'beta.d']
executable('myapp', myapp_src)
test_exe = executable('myapp_test', myapp_src, d_unittest: true)
test('myapptest', test_exe)
D-Bibliotheken kompilieren und installieren
Das Erstellen von D-Bibliotheken ist ein unkomplizierter Prozess, nicht anders als das Erstellen von C-Bibliotheken in Meson. Sie sollten eine pkg-config-Datei generieren und installieren, damit andere Software auf dem System die Abhängigkeit finden kann, sobald sie installiert ist.
Dies ist ein Beispiel, wie man eine D-Shared-Bibliothek erstellt.
project('mylib', 'd', version: '1.2.0')
project_soversion = 0
glib_dep = dependency('glib-2.0')
my_lib = library('mylib',
['src/mylib/libfunctions.d'],
dependencies: [glib_dep],
install: true,
version: meson.project_version(),
soversion: project_soversion,
d_module_versions: ['FeatureA', 'featureB', 1]
)
pkgc = import('pkgconfig')
pkgc.generate(name: 'mylib',
libraries: my_lib,
subdirs: 'd/mylib',
version: meson.project_version(),
description: 'A simple example D library.',
d_module_versions: ['FeatureA', 1]
)
install_subdir('src/mylib/', install_dir: 'include/d/mylib/')
Es ist wichtig, die D-Quellen in einem Unterverzeichnis im Include-Pfad zu installieren, in diesem Fall /usr/include/d/mylib/mylib. Alle D-Compiler inkludieren standardmäßig das Verzeichnis /usr/include/d. Wenn Ihre Bibliothek in /usr/include/d/mylib installiert würde, besteht eine hohe Wahrscheinlichkeit, dass der Compiler beim erneuten Kompilieren Ihres Projekts auf einer Maschine, auf der Sie es installiert haben, die alte installierte Include-Datei der neuen Version im Quellcodebaum vorzieht, was zu sehr verwirrenden Fehlern führt.
Dies ist ein Beispiel dafür, wie die gerade erstellte und installierte D-Bibliothek in einer Anwendung verwendet wird.
project('myapp', 'd')
mylib_dep = dependency('mylib', version: '>= 1.2.0')
myapp_src = ['app.d', 'alpha.d', 'beta.d']
executable('myapp', myapp_src, dependencies: [mylib_dep])
Bitte beachten Sie, dass die Bibliothek und die ausführbare Datei mit exakt demselben D-Compiler und derselben D-Compiler-Version erstellt werden müssen. Die D-ABI ist nicht stabil über Compiler und deren Versionen hinweg, und das Mischen von Compilern führt zu Problemen.
Integration mit DUB
DUB ist ein vollständig integriertes Build-System für D, aber es ist auch eine Möglichkeit, Abhängigkeiten bereitzustellen. Das Hinzufügen von Abhängigkeiten aus dem D-Paket-Repository ist ziemlich einfach. Wie das geht, erfahren Sie unter Dependencies. Sie können auch automatisch eine dub.json-Datei generieren lassen, wie in Dlang erläutert.
Die Ergebnisse der Suche sind