添加 GCC 头文件路径

本文介绍了如何在GCC编译时添加头文件路径,包括使用相对路径、gcc的-I选项和设置CPLUS_INCLUDE_PATH环境变量的方法。通过这些方法,可以方便地包含自定义头文件或特定目录下的系统头文件。

本文的目的是添加#include指示字所包含的头文件路径,先说明两种#include指示字的两种形式

C #include 指示字

#include <…>: 先查找-I选项说明的目录,再查找系统目录标准集合。常用于系统头文件。
#include “…”: 先查找当前工作目录,再查找-I选项说明的目录,再查找系统目录标准集合。常用于用户自己定义的头文件。

这么一看"…“似乎总比<…>更优越,因为”…“比<…>多搜索一个当前工作目录。但凡事总有例外,c++标准头文件只能使用尖括号<…>,使用引号”…"会报错,详见#include使用引号“”和尖括号<>的区别?

#include “…” 可以在使用gcc编译时检索到当前目录下的所有头文件,如果我们想把头文件放在同一个include子文件夹下,则需要额外的处理。

假设我们要使用gcc编译一下程序:

// filename.cpp
#include <time.h>
int main(){
	return 0;
}

time.h头文件在 path/to/sys 目录下。这里介绍三种方法,最后一种是最为推荐的方案。

使用相对路径指示头文件位置

#include<sys/time.h> 会在所有-I 和标准目录的子目录 sys中查找头文件time.h。
这样的包含路径的问题是如果 time.h中还包含 sys子目录下的头文件,则gcc还是检索不到。

使用gcc -I 命令

gcc -I path/to/sys filename.cpp 可以解决上述检索不到的问题。

但问题是如果我们有很多路径要包含, 对每一个路径都要写 -I path/to/dir1 -I path/to/dir2 -I path/to/dir3 filename.cpp 这样的编译命令太过繁琐,也不太容易看清。

使用CPLUS_INCLUDE_PATH 环境变量

gcc 命令会在CPLUS_INCLUDE_PATH(如果是.c程序则是C_INCLUDE_PATH)所包含的目录列表中查找头文件,这个头文件的功能等价于 gcc -isystem directory选项,即将CPLUS_INCLUDE_PATH中的目录标记为系统目录,按标准系统目录的使用方式处理。我们可以在shell 脚本中给这个环境变量赋值,运行shell 脚本后就可以包含我们想要的环境变量。多个路径之间以冒号":"分隔。

#!/bin/bash
//cmd-load
CPLUS_INCLUDE_PATH="path/to/dir1"
CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:path/to/dir2"
CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:path/to/dir3"
export CPLUS_INCLUDE_PATH #export 命令用来设置环境变量

这段shell脚本将创建CPLUS_INCLUDE_PATH=path/to/dir1:path/to/dir2:path/to/dir3 这个环境变量。 将这个文本存为cmd-load,每次开发程序前都使用

$ bash cmd-load

运行这段脚本即可。gcc 命令后无需再添加任何 -I命令。

Reference:
《Linux Shell脚本攻略》Shantanu Tushar,Sarath Lakshman 著,门佳 译
《gcc 技术参考大全》Arthur Griffith 著,胡恩华 译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值