Dアプリケーションのコンパイル

MesonにはDプログラムをコンパイルするためのサポートがあります。meson.buildのDの最小ファイルは次のようになります。

project('myapp', 'd')

executable('myapp', 'app.d')

条件付きコンパイル

version()機能を使用して条件付きコンパイルを行っている場合は、d_module_versionsターゲットプロパティを使用して使用できます。

project('myapp', 'd')
executable('myapp', 'app.d', d_module_versions: ['Demo', 'FeatureA'])

デバッグのために、debug()条件はデバッグビルドで自動的にコンパイルされ、追加の識別子をd_debug引数で追加できます。

project('myapp', 'd')
executable('myapp', 'app.d', d_debug: [3, 'DebugFeatureA'])

declare_dependency

0.62.0以降declare_dependencyを使用して独自の依存関係を宣言する場合、条件付きコンパイルバージョンを伝達するためにD固有の機能にパラメーターを追加できます。

my_dep = declare_dependency(
    # ...
    d_module_versions: ['LUA_53'],
    d_import_dirs: include_directories('my_lua_folder'),
)

D特有の許可されるパラメータは、d_module_versionsd_import_dirs(DMDの-Jスイッチ)です。

埋め込みユニットテストの使用

埋め込みunittest関数を使用している場合は、ソースコードは1回は通常のモードで、もう1回はunittestがアクティブな状態で2回コンパイルする必要があります。これは、d_unittestターゲットプロパティをtrueに設定することで行われます。Mesonは、それぞれのコンパイラの-unittestフラグのみを渡し、コンパイラに空のメイン関数を生成させることはありません。ポータブルな方法でその機能が必要な場合は、GNU Dコンパイラにはこの機能がないため、ユニットテスト用の空のmain()関数を自分で作成します。

MesonでD unittestsを使用する例を次に示します。

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ライブラリのコンパイルとインストール

Dライブラリの構築は、MesonでCライブラリが構築される方法と異なりません。インストールされると他のソフトウェアが依存関係を見つけられるように、pkg-configファイルを作成してインストールする必要があります。

共有Dライブラリを構築する方法の例を次に示します。

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/')

Dソースは、この場合は/usr/include/d/mylib/mylibにインストールパス内のサブディレクトリにインストールされるようにすることが重要です。すべてのDコンパイラには、デフォルトで/usr/include/dディレクトリが含まれています。ライブラリが/usr/include/d/mylibにインストールされた場合、以前にインストールしたマシンでプロジェクトをもう一度コンパイルすると、コンパイラはソースツリーの新しいバージョンよりも以前インストールされたincludeを優先する可能性が高く、非常に紛らわしいエラーが発生する可能性があります。

構築してインストールしたばかりのDライブラリをアプリケーションで使用する例を次に示します。

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])

ライブラリと実行可能ファイルはどちらも、まったく同じDコンパイラおよびDコンパイラバージョンを使用して構築する必要があることに注意してください。D ABIはコンパイラとそのバージョン間で安定しておらず、コンパイラを混在させると問題が発生します。

DUBとの統合

DUBはDのための完全統合ビルドシステムですが、依存関係を提供する方法でもあります。Dパッケージレジストリから依存関係を追加するのはとても簡単です。この方法については依存関係をご覧ください。また、Dlangで説明されているようにdub.jsonファイルを自動的に生成することもできます。

検索結果: