cor*_*zza 35 directory g++ header-files include-path
我有一个项目(一个库),它被细分为几个包含代码的目录.我想在项目的根目录中使用g ++搜索头文件,因此我可以避免跨多个源文件的相同头文件的不同包含路径.
主要是,该root/目录有子目录A/,B/并且C/,所有这些都.hpp和.cpp里面的文件.如果A中的某个源文件想包含file.hpp在B中,那么就必须这样做:#include "../B/file.hpp".对于C中的另一个源文件也是如此.但是,如果A本身具有需要文件的子目录file.hpp,那么它将是不一致的并且如果我决定移动文件会导致错误(因为包含路径将是"../../B/file.hpp").
此外,这还需要在其他项目中工作,这些项目位于其他项目之外root/.我已经知道有一个选项可以手动将我的所有头文件复制到默认搜索目录中,但我想按照我描述的方式执行此操作.
编辑:使用该库的所有程序必须仅使用g++ prog.cpp lib.a -o prog.这意味着永久设置g ++的包含路径!
Vik*_*kas 50
A/code.cpp
#include <B/file.hpp>
Run Code Online (Sandbox Code Playgroud)
A/A/code2.cpp
#include <B/file.hpp>
Run Code Online (Sandbox Code Playgroud)
编译使用:
g++ -I /your/source/root /your/source/root/A/code.cpp
g++ -I /your/source/root /your/source/root/A/a/code2.cpp
Run Code Online (Sandbox Code Playgroud)
编辑:
您可以使用环境变量来更改g ++查找头文件的路径.从手册页:
一些其他环境变量会影响预处理器的行为.
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)
您当然可以在Makefile等中添加它.
Yue*_*oum 17
gcc -I/path -L/path
Run Code Online (Sandbox Code Playgroud)
-I /path 要包含的路径,gcc将在此路径中找到.h文件
-L /path包含库文件.a,.so
| 归档时间: |
|
| 查看次数: |
103928 次 |
| 最近记录: |