Comment on this page

DMD Compiler for

Requirements and Downloads

  1. Download D Compiler

Files

srcphobos
D runtime library source
srcdmd
D compiler front end source under dual (GPL and Artistic) license
htmld
Documentation
samplesd
Sample D programs

Installation

Compiler Arguments and Switches

dmd files... -switches...
files...
File Extensions
Extension File Type
none D source files
.d D source files
.dd Ddoc source files
.di D interface files
. Object files to link in
. Object code libraries to search
@cmdfile
If cmdfile is an environment variable, read the compiler arguments and switches from the value of that variable. Otherwise, read compiler arguments and switches from the text file cmdfile
-c
compile only, do not link
-cov
instrument for code coverage analysis
-D
generate documentation from source
-Dddocdir
write documentation file to docdir directory
-Dffilename
write documentation file to filename
-d
allow deprecated features
-debug
compile in debug code
-debug=level
compile in debug level <= level
-debug=ident
compile in debug identifier ident
-debuglib=libname
link in libname as the default library when compiling for symbolic debugging instead of
-defaultlib=libname
link in libname as the default library when not compiling for symbolic debugging instead of
-deps=filename
write module dependencies as text to filename
-g
-gc
-gs
always generate standard stack frame
-H
generate D interface file
-Hddir
write D interface file to dir directory
-Hffilename
write D interface file to filename
--help
print brief help to console
-Ipath
where to look for imports. path is a ; separated list of paths. Multiple -I's can be used, and the paths are searched in the same order.
-ignore
ignore unsupported pragmas
-inline
inline expand functions at the discretion of the compiler. This can improve performance, at the expense of making it more difficult to use a debugger on it.
-Jpath
where to look for files for ImportExpressions. This switch is required in order to use ImportExpressions. path is a ; separated list of paths. Multiple -J's can be used, and the paths are searched in the same order.
-Llinkerflag
pass linkerflag to the , for example,
-lib
generate library file as output instead of object file(s). All compiled source files, as well as object files and library files specified on the command line, are inserted into the output library. Compiled source modules may be partitioned into several object modules to improve granularity. The name of the library is taken from the name of the first source module to be compiled. This can be overridden with the -of switch.
-man
-map
generate a .map file
-noboundscheck
turns off all array bounds checking, even for safe functions
-O
Optimize generated code. For fastest executables, compile with the -O -release -inline switches together.
-o-
Suppress generation of object file. Useful in conjuction with -D or -H flags.
-odobjdir
write object files relative to directory objdir instead of to the current directory
-offilename
Set output file name to filename in the output directory. The output file can be an object file, executable file, or library file depending on the other switches.
-op
normally the path for .d source files is stripped off when generating an object file name. -op will leave it on.
-profile
profile the runtime performance of the generated code
-property
enforce use of @property on property functions
-quiet
suppress non-essential compiler messages
-release
compile release version, which means not generating code for contracts and asserts. Array bounds checking is not done for system and trusted functions.
-run srcfile args... compile
link, and run the program srcfile with the rest of the command line, args..., as the arguments to the program. No . or executable file is left behind.
-unittest
compile in unittest code, turns on asserts, and sets the unittest version identifier
-v
verbose
-version=level
compile in version level >= level
-version=ident
compile in version identifier ident
-vtls
print informational messages identifying variables defaulting to thread local storage. Handy for migrating to shared model.
-w
enable warnings
-wi
enable informational warnings (i.e. compilation still proceeds normally)
-X
generate JSON file
-Xffilename
write JSON file to filename

Linking

Linking is done directly by the dmd compiler after a successful compile. To prevent dmd from running the linker, use the -c switch.

Environment Variables

The D compiler dmd uses the following environment variables:


Differences between Windows and Linux versions


D Interface Files

When an import declaration is processed in a D source file, the compiler searches for the D source file corresponding to the import, and processes that source file to extract the information needed from it. Alternatively, the compiler can instead look for a corresponding D interface file. A D interface file contains only what an import of the module needs, rather than the whole implementation of that module.

The advantages of using a D interface file for imports rather than a D source file are:

D interface files can be created by the compiler from a D source file by using the -H switch to the compiler. D interface files have the .di file extension. When the compiler resolves an import declaration, it first looks for a .di D interface file, then it looks for a D source file.

D interface files bear some analogous similarities to C++ header files. But they are not required in the way that C++ header files are, and they are not part of the D language. They are a feature of the compiler, and serve only as an optimization of the build process.

Building Executables

dmd can build an executable much faster if as many of the source files as possible are put on the command line.

Another advantage to putting multiple source files on the same invocation of dmd is that dmd will be able to do some level of cross-module optimizations, such as function inlining across modules.

Building Libraries

There are three ways to build a library. For example, given foo.d and bar.d which are to be compiled, and existing object file bar. and existing library def. which are all to be combined into a library foo.:

  1. Compile modules separately and then run the librarian on them: This option is typical when using a makefile to avoid compiling modules that have already been compiled.
  2. Compile modules together and then run the librarian on them:
  3. Use dmd to compile and build library in one operation:
    dmd -lib foo.d bar.d abc. def.
    
    No object files are written to disk, it's all done in memory. Using -lib also has the advantage that modules may be compiled into multiple object files rather than exactly one per module. This improves granularity of the library without having to break up the modules.

Compiling dmd

Complete source code is provided to build the compiler. Follow these steps:

Compiling Phobos

Complete source code is provided to build Phobos, the D runtime library. Follow these steps:

Forums | Comments |  D  | Search | Downloads | Home