モジュールをコンパイルするとき、dmd には、そのモジュールがそのインポート パスで必要とするすべてのモジュールの .d ファイルまたは .di ファイルが必要です。-I
インポート パスにパスを追加できます。ただし、それでは他のモジュールはビルドされません。ビルドを要求したモジュールをビルドするために必要なものを dmd に与えるだけです。また、リンクするとき、dmd は、プログラムで使用されているすべてのモジュールのオブジェクト ファイルまたはライブラリ バイナリのいずれかを必要とします。そうしないと、未定義のシンボルについてエラーが発生-L
します (ライブラリでリンクする場合は、リンカー フラグに使用できます)。リンク手順では C リンカを使用するため、D にまったく対応しておらず、モジュールについて何も認識していません。
したがって、2 つのステップでコンパイルおよびリンクする場合は、最初に各モジュールを個別に、または他のモジュールと一緒にコンパイルし、コンパイラに渡すフラグに応じて、オブジェクト ファイルまたはライブラリ ファイルのいずれかを生成します (オブジェクト ファイルがデフォルトです)。次に、リンク段階でこれらのオブジェクト ファイルとライブラリをリンクし、実行可能ファイルを生成します。
-c
またはを渡さずに dmd を使用する-lib
と、コンパイルとリンクの両方が行われるため、コンパイルする予定のすべてのモジュールを提供する必要があります。未定義のシンボル。コンパイルするように要求したモジュールがインポートするすべてのモジュールを魔法のようにコンパイルするわけではありません。そのような動作が必要な場合は、rdmd などのツールを使用する必要があります。
dmd.conf (Posix の場合) または sc.ini (Windows の場合) により、dmd は指定しなくても druntime と Phobos を見つけることができます。その構成ファイルは、適切な .d および .di ファイルをインポート パスに追加し、(プラットフォームに応じて) libphobos.a または phobos.lib を追加します。DFLAGS
これにより、dmd は、モジュールをコンパイルするときにそれらのモジュールを見つけ、次のライブラリにリンクできます。リンクフェーズ。また、標準ライブラリが機能するために必要なその他のフラグ (Linux の librt でのリンクなど) も追加します。これらのファイルのいずれかを非標準の場所に移動した場合、dmd が引き続きそれらを見つけられるようにするために変更する必要があるのは、その構成ファイルです。