120 Chapter 4. GCC Command OptionsCPATHC_INCLUDE_PATHCPLUS_INCLUDE_PATHOBJC_INCLUDE_PATHEach variable’s value is a list of directories separated by a special character, much like PATH, inwhich to look for header files. The special character, PATH_SEPARATOR, is target-dependent anddetermined at GCC build time. For Microsoft Windows-based targets it is a semicolon, and foralmost all other targets it is a colon.CPATH specifies a list of directories to be searched as if specified with -I, but after any pathsgiven with -I options on the command line. This environment variable is used regardless ofwhich language is being preprocessed.The remaining environment variables apply only when preprocessing the particular languageindicated. Each specifies a list of directories to be searched as if specified with -isystem, butafter any paths given with -isystem options on the command line.In all these variables, an empty element instructs the compiler to search its current workingdirectory. Empty elements can appear at the beginning or end of a path. For instance, if the valueof CPATH is :/special/include, that has the same effect as -I. -I/special/include.DEPENDENCIES_OUTPUTIf 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 dependencyoutput.The value of DEPENDENCIES_OUTPUT can be just a file name, in which case the Make rules arewritten to that file, guessing the target name from the source file name. Or the value can have theform file target, in which case the rules are written to file file using target as the targetname.In other words, this environment variable is equivalent to combining the options -MM and -MF(Section 4.11 Options Controlling the Preprocessor), with an optional -MT switch too.SUNPRO_DEPENDENCIESThis variable is the same as DEPENDENCIES_OUTPUT (see above), except that system header filesare not ignored, so it implies -M rather than -MM. However, the dependence on the main input fileis omitted. Section 4.11 Options Controlling the Preprocessor.4.20. Using Precompiled HeadersOften large projects have many header files that are included in every source file. The time the com-piler takes to process these header files over and over again can account for nearly all of the timerequired to build the project. To make builds faster, GCC allows users to ‘precompile’ a header file;then, if builds can use the precompiled header file they will be much faster.Caution: There are a few known situations where GCC will crash when trying to use a precompiledheader. If you have trouble with a precompiled header, you should remove the precompiled headerand compile without it. In addition, please use GCC’s on-line defect-tracking system to report anyproblems you encounter with precompiled headers.To create a precompiled header file, simply compile it as you would any other file, if necessary usingthe -x option to make the driver treat it as a C or C++ header file. You will probably want to use atool like make to keep the precompiled header up-to-date when the headers it contains change.A precompiled header file will be searched for when #include is seen in the compilation. As itsearches for the included file () the compiler looks for a precompiled header in each directory just