---
name: "makedefs"
section: "6"
platform: "linux"
package: "nethack"
version: "5.0.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/makedefs/6"
---

# makedefs(6)

NetHack miscellaneous build-time functions

## NAME

makedefs - NetHack miscellaneous build-time functions

## SYNOPSIS

**makedefs** { **-o** \| **-d** \| **-e** \| **-m** \| **-v** \| **-p** \| **-q** \| **-r** \| **-h** }

**makedefs --input** *file* **--output** *file* **--***command*

## DESCRIPTION

**Makedefs** is a build-time tool used for a variety of **NetHack**(6) source file creation and modification tasks.  For historical reasons, **makedefs** takes two types of command lines.  When invoked with a short option, the files operated on are determined when **makedefs** is compiled.  When invoked with a long option, the **--input** and  **--output** options are used to specify the files for the **--***command.* Each command is only available in one of the two formats.

## SHORT COMMANDS

Upper and lower case are both accepted for the short commands.

- **-o**

  Generate *onames.h.*\

- **-d**

  Generate *data.base.*\

- **-e**

  Generate *dungeon.pdf.* The input file *dungeon.def* is passed through the same logic as that used by the **--grep** command; see the **MDGREP FUNCTIONS** section below for details.\

- **-m**

  Generate *date.h* and *options* file. It will read  *dat/gitinfo.txt*, only if it is present, to obtain  **githash=** and  **gitbranch=** info and include related preprocessor #defines in *date.h* file.\

- **-p**

  Generate *pm.h*\

- **-q**

  Generate the *rumors* file.\

- **-s**

  Generate the *bogusmon*, *engrave*, and *epitaph* files.\

- **-1**

  Generate the *epitaph* file.\

- **-2**

  Generate the *engrave* file.\

- **-3**

  Generate the *bogusmon* file.\

- **-h**

  Generate the **oracles** file.\

## LONG COMMANDS

- **--debug**

  Show debugging output.\

- **--make \[*command*\]**

  Execute a short command.  Command is given without preceding dash.\

- **--input** *file*

  Specify the input *file* for the command (if needed).  If the file is - standard input is read.\

- **--output** *file*

  Specify the output *file* for the command (if needed).  If the file is - standard output is written.\

- **--svs \[*delimiter*\]**

  Generate a version string to standard output without a trailing newline. If specified, the delimiter is used between each part of the version string.\

- **--grep**

  Filter the input *file to the output* *file*. See the **MDGREP FUNCTIONS** section below for information on controlling the filtering operation.\

- **--grep-showvars**

  Show the name and value for each variable known to the grep option.\

- **--grep-trace**

  Turn on debug tracing for the grep function ( **--grep** must be specified as well).\

- **--grep-defined** *symbol*

  Exit shell true (0) if *symbol* is known and defined, otherwise exit shell false (1).

- **--grep-define** *symbol*

  Force the value of *symbol* to be "defined." *Symbol* must already be known to **makedefs**.\

- **--grep-undef** *symbol*

  Force the definition of *symbol* to be "undefined." *Symbol* must already be known to **makedefs**.

## MDGREP FUNCTIONS

The **--grep** command (and certain other commands) filter their input, on a line-by-line basis, according to control lines embedded in the input and on information gleaned from the **NetHack**(6) configuration.  This allows certain changes such as embedding platform-specific documentation into the master documentation files.

Rules:

- \-

  The default conditional state is printing enabled.

- \-

  Any line *NOT* starting with a caret (^) is either suppressed or passed through unchanged depending on the current conditional state.

- \-

  Any line starting with a caret is a control line; as in C, zero or more spaces may be embedded in the line almost anywhere (except immediately after the caret); however the caret must be in column 1.

- \-

  Conditionals may be nested.

- \-

  *Makedefs* will exit with an error code if any errors are detected; processing will continue (if it can) to allow as many errors as possible to be detected.

- \-

  Unknown identifiers are treated as both TRUE and as an error.  Note that **--undef** or **#undef** in the **NetHack**(6) configuration are different from unknown.

Control lines:

- ^^

  a line starting with a (single) literal caret

- ^#

  a comment

- ^?*ID*

  if the *ID* is defined set the conditional state to TRUE

- ^!*ID*

  if the *ID* is not defined set the conditional state to TRUE

- ^:

  else; invert the conditional state

- ^.

  end the most recent conditional

## AUTHOR

The NetHack Development Team

## COPYRIGHT

This file is Copyright (C) Kenneth Lorber, 2024 for version :. NetHack may be freely redistributed.  See license for details.
