Code Generation (The GNU D Compiler)

### 1.4 Code Generation ¶

In addition to the many `gcc` options controlling code generation, `gdc` has several options specific to itself.

`-H` ¶

  Generates D interface files for all modules being compiled. The compiler determines the output file based on the name of the input file, removes any directory components and suffix, and applies the `.di` suffix.

`-Hd dir` ¶

  Same as `-H`, but writes interface files to directory dir. This option can be used with `-Hf file` to independently set the output file and directory path.

`-Hf file` ¶

  Same as `-H` but writes interface files to file. This option can be used with `-Hd dir` to independently set the output file and directory path.

`-M` ¶

  Output the module dependencies of all source files being compiled in a format suitable for `make`. The compiler outputs one `make` rule containing the object file name for that source file, a colon, and the names of all imported files.

`-MM` ¶

  Like `-M` but does not mention imported modules from the D standard library package directories.

`-MF file` ¶

  When used with `-M` or `-MM`, specifies a file to write the dependencies to. When used with the driver options `-MD` or `-MMD`, `-MF` overrides the default dependency output file.

`-MG` ¶

  This option is for compatibility with `gcc`, and is ignored by the compiler.

`-MP` ¶

  Outputs a phony target for each dependency other than the modules being compiled, causing each to depend on nothing.

`-MT target` ¶

  Change the target of the rule emitted by dependency generation to be exactly the string you specify. If you want multiple targets, you can specify them as a single argument to `-MT`, or use multiple `-MT` options.

`-MQ target` ¶

  Same as `-MT`, but it quotes any characters which are special to `make`.

`-MD` ¶

  This option is equivalent to `-M -MF file`. The driver determines file by removing any directory components and suffix from the input file, and then adding a `.deps` suffix.

`-MMD` ¶

  Like `-MD` but does not mention imported modules from the D standard library package directories.

`-X` ¶

  Output information describing the contents of all source files being compiled in JSON format to a file. The driver determines file by removing any directory components and suffix from the input file, and then adding a `.json` suffix.

`-Xf file` ¶

  Same as `-X`, but writes all JSON contents to the specified file.

`-fdoc` ¶

  Generates `Ddoc` documentation and writes it to a file. The compiler determines file by removing any directory components and suffix from the input file, and then adding a `.html` suffix.

`-fdoc-dir=dir` ¶

  Same as `-fdoc`, but writes documentation to directory dir. This option can be used with `-fdoc-file=file` to independently set the output file and directory path.

`-fdoc-file=file` ¶

  Same as `-fdoc`, but writes documentation to file. This option can be used with `-fdoc-dir=dir` to independently set the output file and directory path.

`-fdoc-inc=file` ¶

  Specify file as a Ddoc macro file to be read. Multiple `-fdoc-inc` options can be used, and files are read and processed in the same order.

`-fdump-c++-spec=file`

  For D source files, generate corresponding C++ declarations in file.

`-fdump-c++-spec-verbose`

  In conjunction with `-fdump-c++-spec=` above, add comments for ignored declarations in the generated C++ header.

`-fsave-mixins=file` ¶

  Generates code expanded from D `mixin` statements and writes the processed sources to file. This is useful to debug errors in compilation and provides source for debuggers to show when requested.