Go to the first, previous, next, last section, table of contents.


Invoking m4

The format of the m4 command is:

m4 [option...] [macro-definitions...] [input-file...]

All options begin with `-', or if long option names are used, with a `--'. A long option name need not be written completely, and unambigous prefix is sufficient. m4 understands the following options:

--version
Print the version number of the program on standard output, then immediately exit m4 without reading any input-files.
--help
Print an help summary on standard output, then immediately exit m4 without reading any input-files.
-G
--traditional
Suppress all the extensions made in this implementation, compared to the System V version. See section Compatibility with other versions of m4, for a list of these.
-E
--fatal-warnings
Stop execution and exit m4 once the first warning has been issued, considering all of them to be fatal.
-dflags
--debug=flags
Set the debug-level according to the flags flags. The debug-level controls the format and amount of information presented by the debugging functions. See section Controlling debugging output for more details on the format and meaning of flags.
-lnum
--arglength=num
Restrict the size of the output generated by macro tracing. See section Controlling debugging output for more details.
-ofile
--error-output=file
Redirect debug and trace output to the named file. Error messages are still printed on the standard error output. See section Saving debugging output for more details.
-Idir
--include=dir
Make m4 search dir for included files that are not found in the current working directory. See section Searching for include files for more details.
-e
--interactive
Makes this invocation of m4 interactive. This means that all output will be unbuffered, and interrupts will be ignored.
-s
--synclines
Generate synchronisation lines, for use by the C preprocessor or other similar tools. This is useful, for example, when m4 is used as a front end to a compiler. Source file name and line number information is conveyed by directives of the form `#line linenum "filename"', which are inserted as needed into the middle of the input. Such directives mean that the following line originated or was expanded from the contents of input file filename at line linenum. The `"filename"' part is often omitted when the file name did not change from the previous directive. Synchronisation directives are always given on complete lines per themselves. When a synchronisation discrepancy occurs in the middle of an output line, the associated synchronisation directive is delayed until the beginning of the next generated line.
-P
--prefix-builtins
Internally modify all builtin macro names so they all start with the prefix `m4_'. For example, using this option, one should write `m4_define' instead of `define', and `m4___file__' instead of `__file__'.
-WREGEXP
--word-regexp=REGEXP
Use an alternative syntax for macro names. This experimental option might not be present on all GNU m4 implementations. (see section Changing the lexical structure of words).
-Hn
--hashsize=n
Make the internal hash table for symbol lookup be n entries big. The number should be prime. The default is 509 entries. It should not be necessary to increase this value, unless you define an excessive number of macros.
-Ln
--nesting-limit=n
Artificially limit the nesting of macro calls to n levels, stopping program execution if this limit is ever exceeded. When not specified, nesting is limited to 250 levels. The precise effect of this option might be more correctly associated with textual nesting than dynamic recursion. It has been useful when some complex m4 input was generated by mechanical means. Most users would never need this option. If shown to be obtrusive, this option (which is still experimental) might well disappear. This option does not have the ability to break endless rescanning loops, while these do not necessarily consume much memory or stack space. Through clever usage of rescanning loops, one can request complex, time-consuming computations to m4 with useful results. Putting limitations in this area would break m4 power. There are many pathological cases: `define(`a', `a')a' is only the simplest example (but see section Compatibility with other versions of m4). Expecting GNU m4 to detect these would be a little like expecting a compiler system to detect and diagnose endless loops: it is a quite hard problem in general, if not undecidable!
-Q
--quiet
--silent
Suppress warnings about missing or superflous arguments in macro calls.
-B
-S
-T
These options are present for compatibility with System V m4, but do nothing in this implementation.
-Nn
--diversions=n
These options are present only for compatibility with previous versions of GNU m4, and were controlling the number of possible diversions which could be used at the same time. They do nothing, because there is no fixed limit anymore.

Macro definitions and deletions can be made on the command line, by using the `-D' and `-U' options. They have the following format:

-Dname
-Dname=value
--define=name
--define=name=value
This enters name into the symbol table, before any input files are read. If `=value' is missing, the value is taken to be the empty string. The value can be any string, and the macro can be defined to take arguments, just as if it was defined from within the input.
-Uname
--undefine=name
This deletes any predefined meaning name might have. Obviously, only predefined macros can be deleted in this way.
-tname
--trace=name
This enters name into the symbol table, as undefined but traced. The macro will consequently be traced from the point it is defined.
-Ffile
--freeze-state file
Once execution is finished, write out the frozen state on the specified file (see section Fast loading of frozen states).
-Rfile
--reload-state file
Before execution starts, recover the internal state from the specified frozen file (see section Fast loading of frozen states).

The remaining arguments on the command line are taken to be input file names. If no names are present, the standard input is read. A file name of `-' is taken to mean the standard input.

The input files are read in the sequence given. The standard input can only be read once, so the filename `-' should only appear once on the command line.


Go to the first, previous, next, last section, table of contents.