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_versions
とd_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
ファイルを自動的に生成することもできます。
検索結果: