1.9. Options Controlling the Preprocessor

These options control the C preprocessor, which is run on each C source file before actual compilation.

If you use the “-E” option, nothing is done except preprocessing. Some of these options make sense only together with “-E” because they cause the preprocessor output to be unsuitable for actual compilation.

-include file

Process file as input before processing the regular input file. In effect, the contents of file are compiled first. Any “-D” and “-U” options on the command line are always processed before “-include file”, regardless of the order in which they are written. All the “-include” and “-imacros” options are processed in the order in which they are written.

-imacros file

Process file as input, discarding the resulting output, before processing the regular input file. Because the output generated from file is discarded, the only effect of “-imacros file” is to make the macros defined in file available for use in the main input.

Any “-D” and “-U” options on the command line are always processed before “-imacros file”, regardless of the order in which they are written. All the “-include” and “-imacros” options are processed in the order in which they are written.

-idirafter dir

Add the directory dir to the second include path. The directories on the second include path are searched when a header file is not found in any of the directories in the main include path (the one that “-I” adds to).

-iprefix prefix

Specify prefix as the prefix for subsequent “-iwithprefix” options.

-iwithprefix dir

Add a directory to the second include path. The directory's name is made by concatenating prefix and dir, where prefix was specified previously with “-iprefix”. If you have not specified a prefix yet, the directory containing the installed passes of the compiler is used as the default.

-iwithprefixbefore dir

Add a directory to the main include path. The directory's name is made by concatenating prefix and dir, as in the case of “-iwithprefix”.

-isystem dir

Add a directory to the beginning of the second include path, marking it as a system directory, so that it gets the same special treatment as is applied to the standard system directories.

-nostdinc

Do not search the standard system directories for header files. Only the directories you have specified with “-I” options (and the current directory, if appropriate) are searched. See Section 1.12, for information on “-I”.

By using both “-nostdinc” and “-I-”, you can limit the include-file search path to only those directories you specify explicitly.

-undef

Do not predefine any nonstandard macros. (Including architecture flags).

-E

Run only the C preprocessor. Preprocess all the C source files specified and output the results to standard output or to the specified output file.

-C

Tell the preprocessor not to discard comments. Used with the “-E” option.

-P

Tell the preprocessor not to generate “#line” directives. Used with the “-E” option.

-M

Tell the preprocessor to output a rule suitable for make describing the dependencies of each object file. For each source file, the preprocessor outputs one make-rule whose target is the object file name for that source file and whose dependencies are all the #include header files it uses. This rule may be a single line or may be continued with “\”-newline if it is long. The list of rules is printed on standard output instead of the preprocessed C program.

-M” implies “-E”.

Another way to specify output of a make rule is by setting the environment variable DEPENDENCIES_OUTPUT (see Section 1.15.).

-MM

Like “-M” but the output mentions only the user header files included with “#include "file"”. System header files included with “#include <file>” are omitted.

-MD

Like “-M” but the dependency information is written to a file made by replacing ".c" with ".d" at the end of the input file names. This is in addition to compiling the file as specified — “-MD” does not inhibit ordinary compilation the way “-M” does.

In Mach, you can use the utility md to merge multiple dependency files into a single dependency file suitable for using with the “make” command.

-MMD

Like “-MD” except mention only user header files, not system header files.

-MG

Treat missing header files as generated files and assume they live in the same directory as the source file. If you specify “-MG”, you must also specify either “-M” or “-MM”. “-MG” is not supported with “-MD” or “-MMD”.

-H

Print the name of each header file used, in addition to other normal activities.

-Aquestion(answer)

Assert the answer answer for question, in case it is tested with a preprocessing conditional such as “#if #question(answer)”. “-A-” disables the standard assertions that normally describe the target machine.

-Dmacro

Define macro macro with the string “1” as its definition.

-Dmacro=defn

Define macro macro as defn. All instances of “-D” on the command line are processed before any “-U” options.

-Umacro

Undefine macro macro. “-U” options are evaluated after all “-D” options, but before any “-include” and “-imacros” options.

-dM

Tell the preprocessor to output only a list of the macro definitions that are in effect at the end of preprocessing. Used with the “-E” option.

-dD

Tell the preprocessing to pass all macro definitions into the output, in their proper sequence in the rest of the output.

-dN

Like “-dD” except that the macro arguments and contents are omitted. Only “#define name” is included in the output.

-trigraphs

Support ANSI C trigraphs. The “-ansi” option also has this effect.

-Wp,option

Pass option as an option to the preprocessor. If option contains commas, it is split into multiple options at the commas.