Menu

- Learn
- Documentation
  - Language Reference
  - Library Reference
  - Command-line Reference
  - Feature Overview
  - Articles
- Packages
- Community
  - Blog
  - Orgs using D
  - Twitter
  - Forums
  - IRC
  - Wiki
  - GitHub
  - Issues
  - Foundation
  - Donate
- Resources
  - Books
  - Tutorials
  - Tools
  - Editors
  - IDEs
  - Visual D
  - Acknowledgments
  - D Style
  - Glossary
  - Sitemap

Search
Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

# rdmd

## Synopsis

In a command prompt:

    % cat myprog.d
    import std.stdio;
    void main()
    {
        writeln("Hello, world without explicit compilations!");
    }
    % rdmd myprog
    Hello, world without explicit compilations!
    % _

Inside a D program:

    % cat myprog.d
    #!/usr/bin/env rdmd
    import std.stdio;
    void main()
    {
        writeln("Hello, world with automated script running!");
    }
    % ./myprog.d
    Hello, world with automated script running!
    % _

(Under Windows replace cat with type and #!/usr/bin/env rdmd with #!rdmd, the latter assuming that rdmd can be found in your path.)

## Description

rdmd is a companion to the dmd compiler that simplifies the typical edit-compile-link-run or edit-make-run cycle to a rapid edit-run cycle. Like make and other tools, rdmd uses the relative dates of the files involved to minimize the amount of work necessary. Unlike make, rdmd tracks dependencies and freshness without requiring additional information from the user.

rdmd:

- shields its user from the notion that producing a running program from D programming language files may entail several concerted steps against different source files producing various intermediate files;
- automatically infers and builds dependent files, transitively, by following import directives;
- recognizes and passes down all of dmd's command-line options;
- understands how various dmd compiler options (e.g. -release vs. -debug) affect generation of intermediate files, and avoids conflations (e.g., does not unwittingly run a debug executable when the release executable is asked for);
- recompiles files only on a needed basis, e.g. two invocations of rdmd in sequence without an intervening change to any relevant source file does not produce the executable again.

## Usage

rdmd [dmd and rdmd options] progfile[.d] [program arguments]

In addition to dmd's options, rdmd recognizes the following:

--build-only
  just build the executable, don't run it
--chatty
  write dmd commands to stdout before executing them
--compiler=/path/to/compiler
  use the specified compiler (e.g. gdmd) instead of dmd
--dry-run
  do not compile, just show what commands would be run (implies --chatty)
--eval=code
  evaluate code including it in void main(char[][] args) { ... } (multiple --eval allowed, will be evaluated in turn)
--exclude=package
  exclude a package from the build (multiple --exclude allowed)
--force
  force a rebuild even if apparently not necessary
--help
  show a help message and exit
--loop=code
  like --eval, but code will be additionally included in a loop foreach (line; stdin.byLine()) { ... }
--main
  add an empty void main() {} function (useful for running unittests)
--makedepend
  print dependencies in makefile format and exit
--man
  open web browser on manual page
--shebang
  rdmd is in a shebang line (put as first argument)

## Download

- View syntax-colored source code
- Download

## Author

Andrei Alexandrescu
Copyright © 1999-2017 by the D Language Foundation | Page generated by Ddoc on Thu Mar 9 17:49:30 2017