Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
CPP(1)				      GNU				CPP(1)

NAME
       cpp - The C Preprocessor

SYNOPSIS
       cpp [-Dmacro[=defn]...] [-Umacro]
	   [-Idir...] [-iquotedir...]
	   [-iremapsrc:dst]
	   [-Wwarn...]
	   [-M|-MM] [-MG] [-MF filename]
	   [-MP] [-MQ target...]
	   [-MT	target...]
	   infile [[-o]	outfile]

       Only the	most useful options are	given above; see below for a more
       complete	list of	preprocessor-specific options.	In addition, cpp
       accepts most gcc	driver options,	which are not listed here.  Refer to
       the GCC documentation for details.

DESCRIPTION
       The C preprocessor, often known as cpp, is a macro processor that is
       used automatically by the C compiler to transform your program before
       compilation.  It	is called a macro processor because it allows you to
       define macros, which are	brief abbreviations for	longer constructs.

       The C preprocessor is intended to be used only with C, C++, and
       Objective-C source code.	 In the	past, it has been abused as a general
       text processor.	It will	choke on input which does not obey C's lexical
       rules.  For example, apostrophes	will be	interpreted as the beginning
       of character constants, and cause errors.  Also,	you cannot rely	on it
       preserving characteristics of the input which are not significant to
       C-family	languages.  If a Makefile is preprocessed, all the hard	tabs
       will be removed,	and the	Makefile will not work.

       Having said that, you can often get away	with using cpp on things which
       are not C.  Other Algol-ish programming languages are often safe
       (Pascal,	Ada, etc.) So is assembly, with	caution.  -traditional-cpp
       mode preserves more white space,	and is otherwise more permissive.
       Many of the problems can	be avoided by writing C	or C++ style comments
       instead of native language comments, and	keeping	macros simple.

       Wherever	possible, you should use a preprocessor	geared to the language
       you are writing in.  Modern versions of the GNU assembler have macro
       facilities.  Most high level programming	languages have their own
       conditional compilation and inclusion mechanism.	 If all	else fails,
       try a true general text processor, such as GNU M4.

       C preprocessors vary in some details.  This manual discusses the	GNU C
       preprocessor, which provides a small superset of	the features of	ISO
       Standard	C.  In its default mode, the GNU C preprocessor	does not do a
       few things required by the standard.  These are features	which are
       rarely, if ever,	used, and may cause surprising changes to the meaning
       of a program which does not expect them.	 To get	strict ISO Standard C,
       you should use the -std=c90, -std=c99 or	-std=c11 options, depending on
       which version of	the standard you want.	To get all the mandatory
       diagnostics, you	must also use -pedantic.

       This manual describes the behavior of the ISO preprocessor.  To
       minimize	gratuitous differences,	where the ISO preprocessor's behavior
       does not	conflict with traditional semantics, the traditional
       preprocessor should behave the same way.	 The various differences that
       do exist	are detailed in	the section Traditional	Mode.

       For clarity, unless noted otherwise, references to CPP in this manual
       refer to	GNU CPP.

OPTIONS
       The cpp command expects two file	names as arguments, infile and
       outfile.	 The preprocessor reads	infile together	with any other files
       it specifies with #include.  All	the output generated by	the combined
       input files is written in outfile.

       Either infile or	outfile	may be -, which	as infile means	to read	from
       standard	input and as outfile means to write to standard	output.	 If
       either file is omitted, it means	the same as if - had been specified
       for that	file.  You can also use	the -o outfile option to specify the
       output file.

       Unless otherwise	noted, or the option ends in =,	all options which take
       an argument may have that argument appear either	immediately after the
       option, or with a space between option and argument: -Ifoo and -I foo
       have the	same effect.

       Many options have multi-letter names; therefore multiple	single-letter
       options may not be grouped: -dM is very different from -d -M.

       -D name
	   Predefine name as a macro, with definition 1.

       -D name=definition
	   The contents	of definition are tokenized and	processed as if	they
	   appeared during translation phase three in a	#define	directive.  In
	   particular, the definition is truncated by embedded newline
	   characters.

	   If you are invoking the preprocessor	from a shell or	shell-like
	   program you may need	to use the shell's quoting syntax to protect
	   characters such as spaces that have a meaning in the	shell syntax.

	   If you wish to define a function-like macro on the command line,
	   write its argument list with	surrounding parentheses	before the
	   equals sign (if any).  Parentheses are meaningful to	most shells,
	   so you should quote the option.  With sh and	csh,
	   -D'name(args...)=definition'	works.

	   -D and -U options are processed in the order	they are given on the
	   command line.  All -imacros file and	-include file options are
	   processed after all -D and -U options.

       -U name
	   Cancel any previous definition of name, either built	in or provided
	   with	a -D option.

       -include	file
	   Process file	as if "#include	"file""	appeared as the	first line of
	   the primary source file.  However, the first	directory searched for
	   file	is the preprocessor's working directory	instead	of the
	   directory containing	the main source	file.  If not found there, it
	   is searched for in the remainder of the "#include "..."" search
	   chain as normal.

	   If multiple -include	options	are given, the files are included in
	   the order they appear on the	command	line.

       -imacros	file
	   Exactly like	-include, except that any output produced by scanning
	   file	is thrown away.	 Macros	it defines remain defined.  This
	   allows you to acquire all the macros	from a header without also
	   processing its declarations.

	   All files specified by -imacros are processed before	all files
	   specified by	-include.

       -undef
	   Do not predefine any	system-specific	or GCC-specific	macros.	 The
	   standard predefined macros remain defined.

       -pthread
	   Define additional macros required for using the POSIX threads
	   library.  You should	use this option	consistently for both
	   compilation and linking.  This option is supported on GNU/Linux
	   targets, most other Unix derivatives, and also on x86 Cygwin	and
	   MinGW targets.

       -M  Instead of outputting the result of preprocessing, output a rule
	   suitable for	make describing	the dependencies of the	main source
	   file.  The preprocessor outputs one make rule containing the	object
	   file	name for that source file, a colon, and	the names of all the
	   included files, including those coming from -include	or -imacros
	   command-line	options.

	   Unless specified explicitly (with -MT or -MQ), the object file name
	   consists of the name	of the source file with	any suffix replaced
	   with	object file suffix and with any	leading	directory parts
	   removed.  If	there are many included	files then the rule is split
	   into	several	lines using \-newline.	The rule has no	commands.

	   This	option does not	suppress the preprocessor's debug output, such
	   as -dM.  To avoid mixing such debug output with the dependency
	   rules you should explicitly specify the dependency output file with
	   -MF,	or use an environment variable like DEPENDENCIES_OUTPUT.
	   Debug output	is still sent to the regular output stream as normal.

	   Passing -M to the driver implies -E,	and suppresses warnings	with
	   an implicit -w.

       -MM Like	-M but do not mention header files that	are found in system
	   header directories, nor header files	that are included, directly or
	   indirectly, from such a header.

	   This	implies	that the choice	of angle brackets or double quotes in
	   an #include directive does not in itself determine whether that
	   header appears in -MM dependency output.

       -MF file
	   When	used with -M or	-MM, specifies a file to write the
	   dependencies	to.  If	no -MF switch is given the preprocessor	sends
	   the rules to	the same place it would	send preprocessed output.

	   When	used with the driver options -MD or -MMD, -MF overrides	the
	   default dependency output file.

       -MG In conjunction with an option such as -M requesting dependency
	   generation, -MG assumes missing header files	are generated files
	   and adds them to the	dependency list	without	raising	an error.  The
	   dependency filename is taken	directly from the "#include" directive
	   without prepending any path.	 -MG also suppresses preprocessed
	   output, as a	missing	header file renders this useless.

	   This	feature	is used	in automatic updating of makefiles.

       -MP This	option instructs CPP to	add a phony target for each dependency
	   other than the main file, causing each to depend on nothing.	 These
	   dummy rules work around errors make gives if	you remove header
	   files without updating the Makefile to match.

	   This	is typical output:

		   test.o: test.c test.h

		   test.h:

       -MT target
	   Change the target of	the rule emitted by dependency generation.  By
	   default CPP takes the name of the main input	file, deletes any
	   directory components	and any	file suffix such as .c,	and appends
	   the platform's usual	object suffix.	The result is the target.

	   An -MT option sets the target to be exactly the string you specify.
	   If you want multiple	targets, you can specify them as a single
	   argument to -MT, or use multiple -MT	options.

	   For example,	-MT '$(objpfx)foo.o' might give

		   $(objpfx)foo.o: foo.c

       -MQ target
	   Same	as -MT,	but it quotes any characters which are special to
	   Make.  -MQ '$(objpfx)foo.o' gives

		   $$(objpfx)foo.o: foo.c

	   The default target is automatically quoted, as if it	were given
	   with	-MQ.

       -MD -MD is equivalent to	-M -MF file, except that -E is not implied.
	   The driver determines file based on whether an -o option is given.
	   If it is, the driver	uses its argument but with a suffix of .d,
	   otherwise it	takes the name of the input file, removes any
	   directory components	and suffix, and	applies	a .d suffix.

	   If -MD is used in conjunction with -E, any -o switch	is understood
	   to specify the dependency output file, but if used without -E, each
	   -o is understood to specify a target	object file.

	   Since -E is not implied, -MD	can be used to generate	a dependency
	   output file as a side-effect	of the compilation process.

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

       -fpreprocessed
	   Indicate to the preprocessor	that the input file has	already	been
	   preprocessed.  This suppresses things like macro expansion,
	   trigraph conversion,	escaped	newline	splicing, and processing of
	   most	directives.  The preprocessor still recognizes and removes
	   comments, so	that you can pass a file preprocessed with -C to the
	   compiler without problems.  In this mode the	integrated
	   preprocessor	is little more than a tokenizer	for the	front ends.

	   -fpreprocessed is implicit if the input file	has one	of the
	   extensions .i, .ii or .mi.  These are the extensions	that GCC uses
	   for preprocessed files created by -save-temps.

       -cxx-isystem dir
	   Search dir for C++ header files, after all directories specified by
	   -I but before the standard system directories.  Mark	it as a	system
	   directory, so that it gets the same special treatment as is applied
	   to the standard system directories.

       -fdirectives-only
	   When	preprocessing, handle directives, but do not expand macros.

	   The option's	behavior depends on the	-E and -fpreprocessed options.

	   With	-E, preprocessing is limited to	the handling of	directives
	   such	as "#define", "#ifdef",	and "#error".  Other preprocessor
	   operations, such as macro expansion and trigraph conversion are not
	   performed.  In addition, the	-dD option is implicitly enabled.

	   With	-fpreprocessed,	predefinition of command line and most builtin
	   macros is disabled.	Macros such as "__LINE__", which are
	   contextually	dependent, are handled normally.  This enables
	   compilation of files	previously preprocessed	with "-E
	   -fdirectives-only".

	   With	both -E	and -fpreprocessed, the	rules for -fpreprocessed take
	   precedence.	This enables full preprocessing	of files previously
	   preprocessed	with "-E -fdirectives-only".

       -iremap src:dst
	   Replace the prefix src in __FILE__ with dst at expansion time.
	   This	option can be specified	more than once.	 Processing stops at
	   the first match.

       -fdollars-in-identifiers
	   Accept $ in identifiers.

       -fextended-identifiers
	   Accept universal character names in identifiers.  This option is
	   enabled by default for C99 (and later C standard versions) and C++.

       -fno-canonical-system-headers
	   When	preprocessing, do not shorten system header paths with
	   canonicalization.

       -ftabstop=width
	   Set the distance between tab	stops.	This helps the preprocessor
	   report correct column numbers in warnings or	errors,	even if	tabs
	   appear on the line.	If the value is	less than 1 or greater than
	   100,	the option is ignored.	The default is 8.

       -ftrack-macro-expansion[=level]
	   Track locations of tokens across macro expansions. This allows the
	   compiler to emit diagnostic about the current macro expansion stack
	   when	a compilation error occurs in a	macro expansion. Using this
	   option makes	the preprocessor and the compiler consume more memory.
	   The level parameter can be used to choose the level of precision of
	   token location tracking thus	decreasing the memory consumption if
	   necessary. Value 0 of level de-activates this option. Value 1
	   tracks tokens locations in a	degraded mode for the sake of minimal
	   memory overhead. In this mode all tokens resulting from the
	   expansion of	an argument of a function-like macro have the same
	   location. Value 2 tracks tokens locations completely. This value is
	   the most memory hungry.  When this option is	given no argument, the
	   default parameter value is 2.

	   Note	that "-ftrack-macro-expansion=2" is activated by default.

       -fexec-charset=charset
	   Set the execution character set, used for string and	character
	   constants.  The default is UTF-8.  charset can be any encoding
	   supported by	the system's "iconv" library routine.

       -fwide-exec-charset=charset
	   Set the wide	execution character set, used for wide string and
	   character constants.	 The default is	UTF-32 or UTF-16, whichever
	   corresponds to the width of "wchar_t".  As with -fexec-charset,
	   charset can be any encoding supported by the	system's "iconv"
	   library routine; however, you will have problems with encodings
	   that	do not fit exactly in "wchar_t".

       -finput-charset=charset
	   Set the input character set,	used for translation from the
	   character set of the	input file to the source character set used by
	   GCC.	 If the	locale does not	specify, or GCC	cannot get this
	   information from the	locale,	the default is UTF-8.  This can	be
	   overridden by either	the locale or this command-line	option.
	   Currently the command-line option takes precedence if there's a
	   conflict.  charset can be any encoding supported by the system's
	   "iconv" library routine.

       -fworking-directory
	   Enable generation of	linemarkers in the preprocessor	output that
	   let the compiler know the current working directory at the time of
	   preprocessing.  When	this option is enabled,	the preprocessor
	   emits, after	the initial linemarker,	a second linemarker with the
	   current working directory followed by two slashes.  GCC uses	this
	   directory, when it's	present	in the preprocessed input, as the
	   directory emitted as	the current working directory in some
	   debugging information formats.  This	option is implicitly enabled
	   if debugging	information is enabled,	but this can be	inhibited with
	   the negated form -fno-working-directory.  If	the -P flag is present
	   in the command line,	this option has	no effect, since no "#line"
	   directives are emitted whatsoever.

       -A predicate=answer
	   Make	an assertion with the predicate	predicate and answer answer.
	   This	form is	preferred to the older form -A predicate(answer),
	   which is still supported, because it	does not use shell special
	   characters.

       -A -predicate=answer
	   Cancel an assertion with the	predicate predicate and	answer answer.

       -C  Do not discard comments.  All comments are passed through to	the
	   output file,	except for comments in processed directives, which are
	   deleted along with the directive.

	   You should be prepared for side effects when	using -C; it causes
	   the preprocessor to treat comments as tokens	in their own right.
	   For example,	comments appearing at the start	of what	would be a
	   directive line have the effect of turning that line into an
	   ordinary source line, since the first token on the line is no
	   longer a #.

       -CC Do not discard comments, including during macro expansion.  This is
	   like	-C, except that	comments contained within macros are also
	   passed through to the output	file where the macro is	expanded.

	   In addition to the side-effects of the -C option, the -CC option
	   causes all C++-style	comments inside	a macro	to be converted	to
	   C-style comments.  This is to prevent later use of that macro from
	   inadvertently commenting out	the remainder of the source line.

	   The -CC option is generally used to support lint comments.

       -P  Inhibit generation of linemarkers in	the output from	the
	   preprocessor.  This might be	useful when running the	preprocessor
	   on something	that is	not C code, and	will be	sent to	a program
	   which might be confused by the linemarkers.

       -traditional
       -traditional-cpp
	   Try to imitate the behavior of pre-standard C preprocessors,	as
	   opposed to ISO C preprocessors.

	   Note	that GCC does not otherwise attempt to emulate a pre-standard
	   C compiler, and these options are only supported with the -E
	   switch, or when invoking CPP	explicitly.

       -trigraphs
	   Support ISO C trigraphs.  These are three-character sequences, all
	   starting with ??, that are defined by ISO C to stand	for single
	   characters.	For example, ??/ stands	for \, so '??/n' is a
	   character constant for a newline.

	   By default, GCC ignores trigraphs, but in standard-conforming modes
	   it converts them.  See the -std and -ansi options.

       -remap
	   Enable special code to work around file systems which only permit
	   very	short file names, such as MS-DOS.

       -H  Print the name of each header file used, in addition	to other
	   normal activities.  Each name is indented to	show how deep in the
	   #include stack it is.  Precompiled header files are also printed,
	   even	if they	are found to be	invalid; an invalid precompiled	header
	   file	is printed with	...x and a valid one with ...! .

       -dletters
	   Says	to make	debugging dumps	during compilation as specified	by
	   letters.  The flags documented here are those relevant to the
	   preprocessor.  Other	letters	are interpreted	by the compiler
	   proper, or reserved for future versions of GCC, and so are silently
	   ignored.  If	you specify letters whose behavior conflicts, the
	   result is undefined.

	   -dM Instead of the normal output, generate a	list of	#define
	       directives for all the macros defined during the	execution of
	       the preprocessor, including predefined macros.  This gives you
	       a way of	finding	out what is predefined in your version of the
	       preprocessor.  Assuming you have	no file	foo.h, the command

		       touch foo.h; cpp	-dM foo.h

	       shows all the predefined	macros.

	   -dD Like -dM	except in two respects:	it does	not include the
	       predefined macros, and it outputs both the #define directives
	       and the result of preprocessing.	 Both kinds of output go to
	       the standard output file.

	   -dN Like -dD, but emit only the macro names,	not their expansions.

	   -dI Output #include directives in addition to the result of
	       preprocessing.

	   -dU Like -dD	except that only macros	that are expanded, or whose
	       definedness is tested in	preprocessor directives, are output;
	       the output is delayed until the use or test of the macro; and
	       #undef directives are also output for macros tested but
	       undefined at the	time.

       -fdebug-cpp
	   This	option is only useful for debugging GCC.  When used from CPP
	   or with -E, it dumps	debugging information about location maps.
	   Every token in the output is	preceded by the	dump of	the map	its
	   location belongs to.

	   When	used from GCC without -E, this option has no effect.

       -I dir
       -iquote dir
       -isystem	dir
       -idirafter dir
	   Add the directory dir to the	list of	directories to be searched for
	   header files	during preprocessing.

	   If dir begins with =, then the = is replaced	by the sysroot prefix;
	   see --sysroot and -isysroot.

	   Directories specified with -iquote apply only to the	quote form of
	   the directive, "#include "file"".  Directories specified with -I,
	   -isystem, or	-idirafter apply to lookup for both the
	   "#include "file"" and "#include <file_" directives.

	   You can specify any number or combination of	these options on the
	   command line	to search for header files in several directories.
	   The lookup order is as follows:

	   1.  For the quote form of the include directive, the	directory of
	       the current file	is searched first.

	   2.  For the quote form of the include directive, the	directories
	       specified by -iquote options are	searched in left-to-right
	       order, as they appear on	the command line.

	   3.  Directories specified with -I options are scanned in left-to-
	       right order.

	   4.  Directories specified with -isystem options are scanned in
	       left-to-right order.

	   5.  Standard	system directories are scanned.

	   6.  Directories specified with -idirafter options are scanned in
	       left-to-right order.

	   You can use -I to override a	system header file, substituting your
	   own version,	since these directories	are searched before the
	   standard system header file directories.  However, you should not
	   use this option to add directories that contain vendor-supplied
	   system header files;	use -isystem for that.

	   The -isystem	and -idirafter options also mark the directory as a
	   system directory, so	that it	gets the same special treatment	that
	   is applied to the standard system directories.

	   If a	standard system	include	directory, or a	directory specified
	   with	-isystem, is also specified with -I, the -I option is ignored.
	   The directory is still searched but as a system directory at	its
	   normal position in the system include chain.	 This is to ensure
	   that	GCC's procedure	to fix buggy system headers and	the ordering
	   for the "#include_next" directive are not inadvertently changed.
	   If you really need to change	the search order for system
	   directories,	use the	-nostdinc and/or -isystem options.

       -I- Split the include path.  This option	has been deprecated.  Please
	   use -iquote instead for -I directories before the -I- and remove
	   the -I- option.

	   Any directories specified with -I options before -I-	are searched
	   only	for headers requested with "#include "file""; they are not
	   searched for	"#include <file_".  If additional directories are
	   specified with -I options after the -I-, those directories are
	   searched for	all #include directives.

	   In addition,	-I- inhibits the use of	the directory of the current
	   file	directory as the first search directory	for "#include "file"".
	   There is no way to override this effect of -I-.

       -iprefix	prefix
	   Specify prefix as the prefix	for subsequent -iwithprefix options.
	   If the prefix represents a directory, you should include the	final
	   /.

       -iwithprefix dir
       -iwithprefixbefore dir
	   Append dir to the prefix specified previously with -iprefix,	and
	   add the resulting directory to the include search path.
	   -iwithprefixbefore puts it in the same place	-I would; -iwithprefix
	   puts	it where -idirafter would.

       -isysroot dir
	   This	option is like the --sysroot option, but applies only to
	   header files	(except	for Darwin targets, where it applies to	both
	   header files	and libraries).	 See the --sysroot option for more
	   information.

       -imultilib dir
	   Use dir as a	subdirectory of	the directory containing target-
	   specific C++	headers.

       -nostdinc
	   Do not search the standard system directories for header files.
	   Only	the directories	explicitly specified with -I, -iquote,
	   -isystem, and/or -idirafter options (and the	directory of the
	   current file, if appropriate) are searched.

       -nostdinc++
	   Do not search for header files in the C++-specific standard
	   directories,	but do still search the	other standard directories.
	   (This option	is used	when building the C++ library.)

       -Wcomment
       -Wcomments
	   Warn	whenever a comment-start sequence /* appears in	a /* comment,
	   or whenever a backslash-newline appears in a	// comment.  This
	   warning is enabled by -Wall.

       -Wtrigraphs
	   Warn	if any trigraphs are encountered that might change the meaning
	   of the program.  Trigraphs within comments are not warned about,
	   except those	that would form	escaped	newlines.

	   This	option is implied by -Wall.  If	-Wall is not given, this
	   option is still enabled unless trigraphs are	enabled.  To get
	   trigraph conversion without warnings, but get the other -Wall
	   warnings, use -trigraphs -Wall -Wno-trigraphs.

       -Wundef
	   Warn	if an undefined	identifier is evaluated	in an "#if" directive.
	   Such	identifiers are	replaced with zero.

       -Wexpansion-to-defined
	   Warn	whenever defined is encountered	in the expansion of a macro
	   (including the case where the macro is expanded by an #if
	   directive).	Such usage is not portable.  This warning is also
	   enabled by -Wpedantic and -Wextra.

       -Wunused-macros
	   Warn	about macros defined in	the main file that are unused.	A
	   macro is used if it is expanded or tested for existence at least
	   once.  The preprocessor also	warns if the macro has not been	used
	   at the time it is redefined or undefined.

	   Built-in macros, macros defined on the command line,	and macros
	   defined in include files are	not warned about.

	   Note: If a macro is actually	used, but only used in skipped
	   conditional blocks, then the	preprocessor reports it	as unused.  To
	   avoid the warning in	such a case, you might improve the scope of
	   the macro's definition by, for example, moving it into the first
	   skipped block.  Alternatively, you could provide a dummy use	with
	   something like:

		   #if defined the_macro_causing_the_warning
		   #endif

       -Wno-endif-labels
	   Do not warn whenever	an "#else" or an "#endif" are followed by
	   text.  This sometimes happens in older programs with	code of	the
	   form

		   #if FOO
		   ...
		   #else FOO
		   ...
		   #endif FOO

	   The second and third	"FOO" should be	in comments.  This warning is
	   on by default.

ENVIRONMENT
       This section describes the environment variables	that affect how	CPP
       operates.  You can use them to specify directories or prefixes to use
       when searching for include files, or to control dependency output.

       Note that you can also specify places to	search using options such as
       -I, and control dependency output with options like -M.	These take
       precedence over environment variables, which in turn take precedence
       over the	configuration of GCC.

       CPATH
       C_INCLUDE_PATH
       CPLUS_INCLUDE_PATH
       OBJC_INCLUDE_PATH
	   Each	variable's value is a list of directories separated by a
	   special character, much like	PATH, in which to look for header
	   files.  The special character, "PATH_SEPARATOR", is target-
	   dependent and determined at GCC build time.	For Microsoft Windows-
	   based targets it is a semicolon, and	for almost all other targets
	   it is a colon.

	   CPATH specifies a list of directories to be searched	as if
	   specified with -I, but after	any paths given	with -I	options	on the
	   command line.  This environment variable is used regardless of
	   which language is being preprocessed.

	   The remaining environment variables apply only when preprocessing
	   the particular language indicated.  Each specifies a	list of
	   directories to be searched as if specified with -isystem, but after
	   any paths given with	-isystem options on the	command	line.

	   In all these	variables, an empty element instructs the compiler to
	   search its current working directory.  Empty	elements can appear at
	   the beginning or end	of a path.  For	instance, if the value of
	   CPATH is ":/special/include", that has the same effect as
	   -I. -I/special/include.

       DEPENDENCIES_OUTPUT
	   If this variable is set, its	value specifies	how to output
	   dependencies	for Make based on the non-system header	files
	   processed by	the compiler.  System header files are ignored in the
	   dependency output.

	   The value of	DEPENDENCIES_OUTPUT can	be just	a file name, in	which
	   case	the Make rules are written to that file, guessing the target
	   name	from the source	file name.  Or the value can have the form
	   file	target,	in which case the rules	are written to file file using
	   target as the target	name.

	   In other words, this	environment variable is	equivalent to
	   combining the options -MM and -MF, with an optional -MT switch too.

       SUNPRO_DEPENDENCIES
	   This	variable is the	same as	DEPENDENCIES_OUTPUT (see above),
	   except that system header files are not ignored, so it implies -M
	   rather than -MM.  However, the dependence on	the main input file is
	   omitted.

       CPP_RESTRICTED
	   If this variable is defined,	cpp will skip any include file which
	   is not a regular file, and will continue searching for the
	   requested name (this	is always done if the found file is a
	   directory).

       SOURCE_DATE_EPOCH
	   If this variable is set, its	value specifies	a UNIX timestamp to be
	   used	in replacement of the current date and time in the "__DATE__"
	   and "__TIME__" macros, so that the embedded timestamps become
	   reproducible.

	   The value of	SOURCE_DATE_EPOCH must be a UNIX timestamp, defined as
	   the number of seconds (excluding leap seconds) since	01 Jan 1970
	   00:00:00 represented	in ASCII; identical to the output of
	   @command{date +%s} on GNU/Linux and other systems that support the
	   %s extension	in the "date" command.

	   The value should be a known timestamp such as the last modification
	   time	of the source or package and it	should be set by the build
	   process.

SEE ALSO
       gpl(7), gfdl(7),	fsf-funding(7),	gcc(1),	and the	Info entries for cpp
       and gcc.

COPYRIGHT
       Copyright (c) 1987-2017 Free Software Foundation, Inc.

       Permission is granted to	copy, distribute and/or	modify this document
       under the terms of the GNU Free Documentation License, Version 1.3 or
       any later version published by the Free Software	Foundation.  A copy of
       the license is included in the man page gfdl(7).	 This manual contains
       no Invariant Sections.  The Front-Cover Texts are (a) (see below), and
       the Back-Cover Texts are	(b) (see below).

       (a) The FSF's Front-Cover Text is:

	    A GNU Manual

       (b) The FSF's Back-Cover	Text is:

	    You	have freedom to	copy and modify	this GNU Manual, like GNU
	    software.  Copies published	by the Free Software Foundation	raise
	    funds for GNU development.

gcc-7.5.0			  2019-11-14				CPP(1)

NAME | SYNOPSIS | DESCRIPTION | OPTIONS | ENVIRONMENT | SEE ALSO | COPYRIGHT

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=cpp&sektion=1&manpath=NetBSD+9.2>

home | help