[sane-devel] sane-config --cflags output

Sergey Vlasov vsu@mivlgu.murom.ru
Tue, 12 Feb 2002 14:57:50 +0300


On Mon, Feb 11, 2002 at 20:47:56 +0100, Henning Meier-Geinitz wrote:
> On Mon, Feb 11, 2002 at 09:44:36AM +0000, Tim Waugh wrote:
> > sane-config --cflags shouldn't say '-I/usr/include', since that's the
> > default include path anyway; similarly, sane-config --libs shouldn't
> > say '-lc' (and it doesn't).
> 
> Can we really assume that /usr/include is included on each and every
> platform? Is it in the C-standard or similar text?
> 
> What is the problem with explicitely mentioning "/usr/include"? Does
> it break anything or makes it much slower?

Info: (gcc.info)Interoperation:

   * Use of `-I/usr/include' may cause trouble.

     Many systems come with header files that won't work with GCC unless
     corrected by `fixincludes'.  The corrected header files go in a new
     directory; GCC searches this directory before `/usr/include'.  If
     you use `-I/usr/include', this tells GCC to search `/usr/include'
     earlier on, before the corrected headers.  The result is that you
     get the uncorrected header files.

     Instead, you should use these options (when compiling C programs):

          -I/usr/local/lib/gcc-lib/TARGET/VERSION/include -I/usr/include

     For C++ programs, GCC also uses a special directory that defines
     C++ interfaces to standard C subroutines.  This directory is meant
     to be searched *before* other standard include directories, so
     that it takes precedence.  If you are compiling C++ programs and
     specifying include directories explicitly, use this option first,
     then the two options above:

          -I/usr/local/lib/g++-include

May be `fixincludes' is only a concern on older systems.  But there is a
problem with C++ <complex.h> - it is different from the C one in
/usr/include, so adding -I/usr/include might break a C++ frontend which
uses complex numbers.

Also, -I/usr/include may interfere with user-specified include paths -
sometimes you may want to compile a program with a library version
different from the one installed in /usr, and with -I/usr/include the
system-installed headers may be picked up anyway.  Same problem with
-L/usr/lib.