1. 背景
自学代码,添加了很多公共的头文件,如:将基本类型通过define定义为更加简便的类型,如:
#define UINT unsigned int
后续申明unsigned int类型时就可以直接用UINT,简洁明了。但是,本人定义的公共头文件不在 gcc 的默认搜索路径下,每次包含此头文件需要具体指定其路径,如:
#include"../../../PUBLIC/include/basetype.h"
甚是麻烦。因为有此需求:修改gcc/g++的搜索路径。
2. #include搜索路径
c/c++代码包含头文件的方式有两种:
#include <AAA.h>
#include “BBB.h”
1) 用双引号“”包含的搜索顺序
1. 先搜索当前目录;
2. 再在编译器设置的include路径内搜索,如:gcc –I 指定的目录;
3. 再在系统的INCLUDE环境变量内搜索,如C_INCLUDE_PATH / CPLUS_INCLUDE_PATH环境变量;
4. 最后搜索gcc的内定目录;
2) 用尖括号<>包含的搜索顺序
1. 在编译器设置的include路径内搜索,如:gcc –I 指定的目录;
2. 在系统的INCLUDE环境变量内搜索,C_INCLUDE_PATH / CPLUS_INCLUDE_PATH;
3. 最后搜索gcc的内定目录。
3. 修改搜索路径
1) 全局永久修改—对所有用户有效
按照第二节的分析,我们可以修改全局环境变量(C_INCLUDE_PATH / CPLUS_INCLUDE_PATH)去添加自定义的头文件路径,方法是修改/etc/profile配置文件,在文件末尾添加自己的路径,如:
export C_INCLUDE_PATH=/home/zhaogang/code_my/PUBLIC:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/home/zhaogang/code_my/PUBLIC:$CPLUS_INCLUDE_PATH
注意事项:
1. 修改后的文件不会立即生效,可以通过如下命令使修改生效:
source /etc/profile
2. 1中的方法对已经打开的shell依然不生效;
2) 指定用户永久修改—对指定用户有效
默认情况下,Linux系统在每个用户的工作目录下自动创建了.bashrc文件,用于保存此用户的一些个性化设置,如命令别名、路径等。因而,我们可以修改此文件,添加自己的头文件包含路径,如:
export C_INCLUDE_PATH=/home/zhaogang/my_self/PUBLIC:$C_INCLUDE_PATH
注意事项:
1. 修改后的文件不会立即生效,可以通过如下命令使修改生效:
source ~/.bashrc
3) 临时修改—只对当前shell有效
直接在当前shell环境修改环境变量,如下,添加/home/test路径
zhaogang@zglinux ~ $ exportC_INCLUDE_PATH=/home/test:$C_INCLUDE_PATH
zhaogang@zglinux ~ $ echo $C_INCLUDE_PATH
/home/test:/home/zhaogang/code_my/PUBLIC:
4. 测试
1. 博主采用修改/etc/profile的方式全局修改了GCC、G++的搜索路径,通过source使其生效后,echo查看环境变量内容,如下:
zhaogang@zglinux~ $ echo $C_INCLUDE_PATH
/home/zhaogang/code_my/PUBLIC:
2. 然后将自己的公共头文件组织如下:
/home/zhaogang/code_my/PUBLIC
|----include
|----basetype.h
|----XXXX.h
之所以在环境变量指定的路径:/home/zhaogang/code_my/PUBLIC下再建一个目录include,是为了后续包含相关头文件时,需要指定其相对环境变量的路径,如:
#include<include/basetype.h>
这样就能方便的识别与
#include<XXX.h>
区分,前者表示为自定义的头文件。
3. 测试并编译代码
测试代码:
#include <stdio.h>
#include <include/basetype.h> /* 自定义头文件 */
INT main()
{
INT iTest = 0;
printf("iTest = %d ,UnixPath : %s \n", iTest, UNIXDOMAIN_PATH);
return 0;
}
编译运行: