如何使g ++search特定目录中的头文件?

我有一个项目(一个库),细分成几个目录,其中的代码。 我想要在项目的根目录中search头文件,所以我可以避免在多个源文件中包含相同头文件的不同包含path。

主要是root/目录下有子目录A/B/C/ ,里面都有.hpp.cpp文件。 如果A中的某个源文件想要包含B中的file.hpp ,则必须这样做: #include "../B/file.hpp" 。 但是,如果A本身具有需要file.hpp文件的file.hpp ,那么这将是不一致的,并且如果我决定移动文件会导致错误(因为包含path将是"../../B/file.hpp" )。

此外,这也需要从其他项目工作,这些项​​目位于root/之外。 我已经知道有一个选项可以手动将所有的头文件复制到一个默认search目录中,但是我想按照我所描述的方式来完成。

编辑:使用该库的所有程序只能用g++ prog.cpp lib.a -o prog编译。 这意味着永久设置g ++的包含path!

Solutions Collecting From Web of "如何使g ++search特定目录中的头文件?"

A / code.cpp

 #include <B/file.hpp> 

A / A / code2.cpp

 #include <B/file.hpp> 

编译使用:

 g++ -I /your/source/root /your/source/root/A/code.cpp g++ -I /your/source/root /your/source/root/A/a/code2.cpp 

编辑:

您可以使用环境变量来更改g ++查找头文件的路径。 从手册页:

一些额外的环境变量会影响预处理器的行为。

  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 /特/包括。

有很多方法可以更改环境变量。 在bash提示符下,你可以这样做:

 $ export CPATH=/your/source/root $ g++ /your/source/root/A/code.cpp $ g++ /your/source/root/A/a/code2.cpp 

你当然可以在你的Makefile中加入这个

 gcc -I/path -L/path 
  • -I /path包含的路径,gcc会在这个路径中找到.h文件

  • -L /path包含库文件, .a.s o

#include <>中包含的标题将在所有默认目录中进行搜索,但是您也可以使用-I命令行参数在搜索路径中添加自己的位置。

我看到你的编辑,你可以安装你的标题默认位置通常

  /usr/local/include libdir/gcc/target/version/include /usr/target/include /usr/include 

尽管用编译器文档确认。

这很简单,使用“-B”选项来添加.h文件的目录到搜索路径。

例如g ++ -B /header_file.h your.cpp -o bin / your_command