C和C++中include搜索路径的⼀般形式以及gcc搜索头⽂件的路
C和C++中include 搜索路径的⼀般形式
对于include 搜索的路径:
  C中可以通过 #include <stdio.h> 和 #include "stidio.h" ,区别是:
  在UNIX系统中,尖括号告诉编译器在⼀个或者多个标准系统⽬录中到⽂件 /usr/include /usr/local/include;即系统头⽂件所在的⽬录。
  看看这些⽂件夹下是否有该头⽂件;如果没有,也不会检索当前⽂件所在路径,并将报错。
  使⽤双引号,编译器先到当前⽬录查头⽂件或⽂件名中指定的其他⽬录,如果没到在到标准系统⽬录查。
include和contain
  即,⾸先搜索本地⽬录,但是具体哪个⽬录依赖于编译器。有些编译器搜索源代码所在⽬录,有些则搜索当前⽬录,还有些搜索⼯程⽂件所在⽬录。当出现此类问题时,我们最好注意⾃⼰所⽤的编译器是如何操作的。在下⾯说明了gcc是如何操作的。
  同时,include也可以采⽤相对路径。⽐如,a.c需要/usr/local/include/Tleap/leap.h,⽽/usr/local/include是系统的默认搜索路径,所以在a.c中可以⽤相对路径包含,
  #include<Tleap/leap.h>。
  对于系统头⽂件,很多IDE具有标准搜索路径,IDE提供菜单选项⽤于指定使⽤尖括号时搜索的路径。
  查看GCC的搜索⽬录:(gcc --help)
  查看编译c++⽂件使⽤的头⽂件⽬录的命令为:`gcc -print-prog-name=cc1plus` -v
  查看编译c⽂件的头⽂件搜索⽬录的命令为 `gcc -print-prog-name=cc1` -v
gcc寻头⽂件的路径:
  1.在gcc编译源⽂件的时候,通过参数 -I 指定头⽂件的搜索路径,如果指定路径有多个路径时,则按照指定路径的顺序搜索头⽂件。
命令形式如:“gcc -I /path/where/theheadfile/in sourcefile.c“,这⾥源⽂件的路径可以是绝对路径,也
可以是相对路径。eg:设当前路径为/root/test,如果include_test.c要使⽤头⽂件“include/include_test.h“,有两种⽅法:
  1) include_test.c中#include “include/include_test.h”或者#include "/root/test/include/include_test.h",然后gcc include_test.c即可
  2) include_test.c中#include /include_test.h ,然后gcc –I include include_test.c也可
 2. 通过查gcc的环境变量C_INCLUDE_PATH、CPLUS_INCLUDE_PATH、OBJC_INCLUDE_PATH来搜索头⽂件位置。
 3. 再标准系统⽬录搜索,分别是
/usr/include
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include
最后⼀⾏是gcc程序的库⽂件地址,各个⽤户的系统上可能不⼀样。
gcc在默认情况下,都会指定到/usr/include⽂件夹寻头⽂件。
gcc还有⼀个参数:-nostdinc,它使编译器不再系统缺省的头⽂件⽬录⾥⾯头⽂件,⼀般和 -I 联合使⽤,明确限定头⽂件的位置。在编译驱动模块时,由于⼀些需求必须强制GCC不搜索系统默认路径,也就是不搜索/usr/include,这时就要⽤参数-nostdinc,还要⾃⼰⽤ -I 参数来指定内核头⽂件路径,这个时候在Makefile中指定即可。
4. 当#include使⽤相对路径的时候,gcc最终会根据上⾯这些路径,来最终构建出头⽂件的位置。如#include 就是包含⽂
件/usr/include/sys/types.h
注:-I 指定的⽬录,在使⽤尖括号引⽤时,是先于标准头⽂件⽬录被搜索的。例如使⽤了 -I./,且当前⽬录下有⼀个 stdio.h,那么在
#include <stdio.h>时,所引⽤的是当前⽬录下的stdio.h,⽽不是系统⾃带的标准头⽂件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。