GCC/G++ 在编译期间查找 .h 文件的环境变量是啥:LIBRARY_PATH、C_PATH、C_INCLUDE_PATH 或 CPLUS_PATH?

Posted

技术标签:

【中文标题】GCC/G++ 在编译期间查找 .h 文件的环境变量是啥:LIBRARY_PATH、C_PATH、C_INCLUDE_PATH 或 CPLUS_PATH?【英文标题】:What is the environment variable for GCC/G++ to look for .h files during compilation: LIBRARY_PATH, C_PATH, C_INCLUDE_PATH or CPLUS_PATH?GCC/G++ 在编译期间查找 .h 文件的环境变量是什么:LIBRARY_PATH、C_PATH、C_INCLUDE_PATH 或 CPLUS_PATH? 【发布时间】:2011-01-30 15:21:02 【问题描述】:

GCC/G++ 是否有环境变量可以在编译过程中查找 .h 文件?

我google了我的问题,有人说LIBRARY_PATH、C_PATH、C_INCLUDE_PATH、CPLUS_PATH,那是哪一个?

【问题讨论】:

***.com/questions/558803/… 我很确定C_PATH 不是一个东西;不应该是CPATH吗? 【参考方案1】:

发件人:http://gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html

CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH

每个变量的值都是一个由特殊字符分隔的目录列表,很像 PATH,在其中查找头文件。特殊字符 PATH_SEPARATOR 取决于目标,并在 GCC 构建时确定。对于基于 Microsoft Windows 的目标,它是一个分号,而对于几乎所有其他目标,它是一个冒号。

CPATH 指定要搜索的目录列表,就像用-I 指定一样,但在命令行上用-I 选项给出的任何路径之后。无论预处理哪种语言,都会使用此环境变量。

其余的环境变量仅在预处理指定的特定语言时适用。每个都指定要搜索的目录列表,就像使用 -isystem 指定一样,但在命令行上使用 -isystem 选项给出的任何路径之后。

在所有这些变量中,一个空元素指示编译器搜索其当前工作目录。空元素可以出现在路径的开头或结尾。例如,如果CPATH 的值为:/special/include,则与“-I. -I/special/include”具有相同的效果。

我认为大多数设置避免使用环境变量,而是使用-I 选项在命令行中传递包含目录。通常会有一个 makefile 变量或一个 IDE 设置来控制传递给 -I 的内容。

【讨论】:

你能总结一下它们之间的区别吗?特别是CPATH和C_INCLUDE_PATH的区别? 发布的答案是对差异的总结。主要的是CPATH不管被编译的语言都是使用的,C_INCLUDE_PATH只用于C。【参考方案2】:

看看actual gcc documentation。那里都有解释。

总结一下:

LIBRARY_PATH 用于链接器,而不用于头文件(用于查找-l 选项请求的库) CPATH 指定要在其中查找头文件的目录(如-I 选项) C_INCLUDE_PATH 和 CPLUS_INCLUDE_PATH 类似于 CPATH,但分别用于 C/C++。

【讨论】:

【参考方案3】:

此外,如果您不确定系统上正在检查哪些路径,您可以使用

cpp -v

这将告诉您正在检查 .h 文件的哪些路径,输出包括以下部分:

#include "..." search starts here:
#include <...> search starts here:

【讨论】:

以上是关于GCC/G++ 在编译期间查找 .h 文件的环境变量是啥:LIBRARY_PATH、C_PATH、C_INCLUDE_PATH 或 CPLUS_PATH?的主要内容,如果未能解决你的问题,请参考以下文章

喵呜:Linux环境基础开发工具使用篇之Linux开发工具:Linux编译器-gcc/g++使用

在centos/vim/gcc g++下 出现错误

Linux环境基础开发工具的使用(yumvimgccg++gdbmake/Makefile)

用 gcc/g++ 编译器编译 c++

Linux编译器-gcc/g++使用

windows环境下gcc/g++ 编译器 乱码问题解决