我有一个项目(一个库),它被细分为几个目录,其中包含代码。我想让g++在项目的根目录中搜索头文件,这样我就可以避免多个源文件中相同头文件的不同包含路径。
root/
目录主要有子目录A/
、B/
和C/
,这些子目录中都有.hpp
和.cpp
文件。如果A中的某个源文件想要包含B中的file.hpp
,则必须这样做:#include "../B/file.hpp"
。C中的另一个源文件也是如此。但是,如果A本身有包含需要file.hpp
的文件的子目录,那么,如果我决定移动文件,它将是不一致的,并且会导致错误(因为包含路径将是"../../B/file.hpp"
)。
此外,这也需要在root/
之外的其他项目中进行。我已经知道有一个选项可以手动将我的所有头文件复制到默认的搜索目录中,但我想按照我描述的方式来做。
编辑:所有使用库的程序都必须仅使用g++ prog.cpp lib.a -o prog
进行编译。这意味着永久设置g++的include路径!
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_SETPARATOR"依赖于目标,并在GCC构建时确定。对于基于Microsoft Windows的目标是分号,对于几乎所有其他目标,它都是冒号。
CPATH指定要搜索的目录列表,就像用-I指定的一样,但在命令行。这无论预处理哪种语言,都会使用环境变量。
其余的环境变量仅在预处理指定的特定语言时适用。每个指定一个要使用的目录列表搜索时就像用-isystem指定的一样,但在命令行上用-isystem选项给定的任何路径之后。
在所有这些变量中,一个空元素指示编译器搜索其当前工作目录。空元素可以出现在开头或路径的末端。例如,如果CPATH的值为":/special/include",则其效果与-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
很简单,使用"-B"选项将.h文件的目录添加到搜索路径中。
例如g++-B/header_file.h your.cpp-o bin/your_command
#include<>包含的标头将在所有默认目录中搜索,但您也可以使用-I命令行arg在搜索路径中添加自己的位置。
我看到了你的编辑,你可以在默认位置安装你的标题,通常是
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
不过,请与编译器文档确认。