blob: e158ee2242a9839e59e0a658f42969a162ed521d [file] [log] [blame]
<html lang="en">
<head>
<title>Search Path - The C Preprocessor</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="The C Preprocessor">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Header-Files.html#Header-Files" title="Header Files">
<link rel="prev" href="Include-Operation.html#Include-Operation" title="Include Operation">
<link rel="next" href="Once_002dOnly-Headers.html#Once_002dOnly-Headers" title="Once-Only Headers">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
2008, 2009, 2010
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.2 or
any later version published by the Free Software Foundation. A copy of
the license is included in the
section entitled ``GNU Free Documentation License''.
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.
-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Search-Path"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Once_002dOnly-Headers.html#Once_002dOnly-Headers">Once-Only Headers</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Include-Operation.html#Include-Operation">Include Operation</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Header-Files.html#Header-Files">Header Files</a>
<hr>
</div>
<h3 class="section">2.3 Search Path</h3>
<p>GCC looks in several different places for headers. On a normal Unix
system, if you do not instruct it otherwise, it will look for headers
requested with <code>#include&nbsp;&lt;</code><var>file</var><code>&gt;<!-- /@w --></code> in:
<pre class="smallexample"> /usr/local/include
<var>libdir</var>/gcc/<var>target</var>/<var>version</var>/include
/usr/<var>target</var>/include
/usr/include
</pre>
<p>For C++ programs, it will also look in <samp><span class="file">/usr/include/g++-v3</span></samp>,
first. In the above, <var>target</var> is the canonical name of the system
GCC was configured to compile code for; often but not always the same as
the canonical name of the system it runs on. <var>version</var> is the
version of GCC in use.
<p>You can add to this list with the <samp><span class="option">-I</span><var>dir</var></samp> command line
option. All the directories named by <samp><span class="option">-I</span></samp> are searched, in
left-to-right order, <em>before</em> the default directories. The only
exception is when <samp><span class="file">dir</span></samp> is already searched by default. In
this case, the option is ignored and the search order for system
directories remains unchanged.
<p>Duplicate directories are removed from the quote and bracket search
chains before the two chains are merged to make the final search chain.
Thus, it is possible for a directory to occur twice in the final search
chain if it was specified in both the quote and bracket chains.
<p>You can prevent GCC from searching any of the default directories with
the <samp><span class="option">-nostdinc</span></samp> option. This is useful when you are compiling an
operating system kernel or some other program that does not use the
standard C library facilities, or the standard C library itself.
<samp><span class="option">-I</span></samp> options are not ignored as described above when
<samp><span class="option">-nostdinc</span></samp> is in effect.
<p>GCC looks for headers requested with <code>#include&nbsp;"</code><var>file</var><code>"<!-- /@w --></code>
first in the directory containing the current file, then in the
directories as specified by <samp><span class="option">-iquote</span></samp> options, then in the same
places it would have looked for a header requested with angle
brackets. For example, if <samp><span class="file">/usr/include/sys/stat.h</span></samp> contains
<code>#include&nbsp;"types.h"<!-- /@w --></code>, GCC looks for <samp><span class="file">types.h</span></samp> first in
<samp><span class="file">/usr/include/sys</span></samp>, then in its usual search path.
<p>&lsquo;<samp><span class="samp">#line</span></samp>&rsquo; (see <a href="Line-Control.html#Line-Control">Line Control</a>) does not change GCC's idea of the
directory containing the current file.
<p>You may put <samp><span class="option">-I-</span></samp> at any point in your list of <samp><span class="option">-I</span></samp> options.
This has two effects. First, directories appearing before the
<samp><span class="option">-I-</span></samp> in the list are searched only for headers requested with
quote marks. Directories after <samp><span class="option">-I-</span></samp> are searched for all
headers. Second, the directory containing the current file is not
searched for anything, unless it happens to be one of the directories
named by an <samp><span class="option">-I</span></samp> switch. <samp><span class="option">-I-</span></samp> is deprecated, <samp><span class="option">-iquote</span></samp>
should be used instead.
<p><samp><span class="option">-I. -I-</span></samp> is not the same as no <samp><span class="option">-I</span></samp> options at all, and does
not cause the same behavior for &lsquo;<samp><span class="samp">&lt;&gt;</span></samp>&rsquo; includes that &lsquo;<samp><span class="samp">""</span></samp>&rsquo;
includes get with no special options. <samp><span class="option">-I.</span></samp> searches the
compiler's current working directory for header files. That may or may
not be the same as the directory containing the current file.
<p>If you need to look for headers in a directory named <samp><span class="file">-</span></samp>, write
<samp><span class="option">-I./-</span></samp>.
<p>There are several more ways to adjust the header search path. They are
generally less useful. See <a href="Invocation.html#Invocation">Invocation</a>.
</body></html>