There is implemented a driver program for the Wave library, which
utilizes nearly all capabilities of the library. It is usable as a preprocessor executable
on top of any other C++ compiler. It outputs the textual representation of the
preprocessed tokens generated from a given input file. This driver program has
the following command line syntax:

The possible options are straightforward and self explanatory. The
following describes some of these options in more detail. Please note, that
the extended options (--c99 and --variadics) are available only, if the driver
was compiled with the constant WAVE_SUPPORT_VARIADICS_PLACEMARKERS
defined.

-o [--output] path

Specify a filename to be used for the generated preprocessed output
stream. If this option is not given, then the standard output is used (stdout).

-I [--include] option

Add the directory dir to the head of the list of directories to be searched for header files. This can be used to override a system
header file, substituting your own version, since these directories are
searched before the system header file directories. However, you should
not use this option to add directories that contain vendor-supplied
system header files (use '-S' for that). If you use more than
one '-I' option, the directories are scanned in left-to-right order,
the standard system directories come after.

If a standard system include directory, or a directory specified with
'-S', is also specified with '-I', the '-I' option will be
ignored. The directory will still be searched but as a system
directory at its normal position in the system include chain.

-I- [--include-] option

The Wave library maintains two separate search paths
for include files. A search path for user include files and a search path
for system include files, where the user include paths are searched before the system include paths.

Any directories specified with '-I' options before
an eventually given '-I-' option are searched only for the case of '#include "file"'
(user include files), they are not searched for '#include <file>'
directives (system include files). If additional directories are specified
with '-I' options after a '-I-' option was given, these directories are searched
for all '#include' directives (ordinarily all '-I' directories are used this way.).

In addition, the '-I-' option inhibits the
use of the current directory (where the current input file came from) as the first search directory for '#include "file"'
directives . With '-I.' you can specify searching the directory which was current when the compiler was invoked. That is not exactly the same as what the
preprocessor does by default, but it is often satisfactory.

-S [--sysinclude] option

Add the given directory to the head of the list of directories
to be searched for system header files. If you use more than one '-S' option,
the directories are scanned in left-to-right order. This option is most useful
in the wave.cfg configuration file to specify, where the system include files
are to be searched.

-F [--forceinclude] option

Process the given file as normal input and include all the resulting
output before the processing the regular input file starts. If more than one
such option is given, the files are pre-included in the sequence of its occurance
on the command line.

-D [--define] macro[=definition]-P [--predefine] macro[=definition]

This option allows to define ('-D') or predefine ('-P') a macro
from the command line. The string given in conjunction with the '-D' or '-P'
option should conform to the usual syntax MACRO(x)=definition as is described
in more detail here.

The only difference between the '-D' and the '-P' options is,
that the latter predefines a macro such, that it is not undefinable
through an #undef directive from inside the preprocessed program.

-U [--undefine] macro

This allows to undefine some of the automatically predefined macros
of the Wave library (see Predefined macros). The only exception are
the __LINE__, __FILE__,
__DATE__, __TIME__,
__STDC__ and __cplusplus
predefined macros, which are not undefinable. If -U and -D are both specified
for one name, the name is not predefined.

-n [--nesting] depth

Specify a new maximal include nesting depth. If the preprocessing
reaches this include file nesting depth, it aborts the preprocessing after
emitting an error message. The default include file nesting depth is 1024.

-t [--traceto] path

Enable the tracing facility build into the Wave library.
The path specifies the filename to use for the output of the generated trace
log. If the filename given equals to '-' (without the quotes), the
trace log is put into the standard error stream (stderr).

--timer

Enable to track the overall elapsed computing time required for
the given input file. The elapsed time is printed to stdout after the compilation
is completed.

Enable the C99 mode. This mode enables certain C99 specific features
as variadics (macros with variable parameter lists), placemarkers (empty macro
arguments) and operator _Pragma support and disables some C++
specific token types as for instance '::', '->*' and '->.'.
Several predefined macros are different for this mode, for more information
about predefined macros you may look here.

-l [--listincludes] path

Enable the output of the names of all opened include files. The path specifies the filename to use for the output of the generated include log. If the filename given equals to '-' (without the quotes), the include log is put into the standard output stream (stdout).

-p [--preserve]

Preserve the comments from the input stream not located inside of macro definitions. The comments located inside macro definitions are skipped even if this option is specified. If this option is not specified on the command line all comments are skipped.

@ [--config-file] option

Some of the possible command line options may be specified inside
of special configuration files. This is very useful, as a shorthand for different
global configurations. A config file may contain additional options (-I, -S,
-F, -U, -D and -P options), one option per line. Empty lines and lines beginning
with a '#' character are ignored (are treated as a comment lines). Note that
the '#' character is treated as the beginning of a comment only, if it is
the first non-whitespace character on a line. Here is a small sample illustrating the supported configuration file syntax:

There is a shorthand for specifying a configuration file on the
command line: simply use the '@' character immediatly before the corresponding
file name.

The options found in a configuration file are interpreted, as
if they were place instead of the configuration file option on the command
line.

The Wave driver program looks at startup for a configuration
file named 'wave.cfg' in the same directory, where it was started from (where
is located the driver executable). If this file exists, it is treated as a normal
configuration file and the specified herein options are interpreted as if they
were given as the first options on the command line. This feature is very useful
for defining a global environment for the Wave preprocessor driver.