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++使用