通过程序代码行设置C++包含路径
Setting C++ include path via program code line
已经列出了许多选项,说明如何向C++编译器添加路径,以便 #include <...>命令在这些路径上工作。但是,假设我有一个文件(不是整个项目),并且我想仅为此文件添加一个包含路径。我想通过 cpp 文件中的一行代码(例如,作为第一行)来做到这一点。这怎么可能?为什么?因为我需要包含来自另一个目录的一些头文件,而这反过来也取决于同一目录中的其他头文件(并且我收到错误消息,由于此路径未添加到包含列表中,因此找不到这些其他文件)。
例如: 假设我想在目录中包含file_a.h
.../include/extra
,
我可以通过
#include <extra/file_a.h>
但是,例如,如果我没有将额外目录直接作为include
的子目录,或者file_a
想要包含来自其他地方的其他文件(甚至可能是/extra
,但它不是包含的子目录,例如),那么我遇到了麻烦,因为那样目录/依赖项的跟踪变得困难。
我认为通过编译器更改这些目录是一个坏习惯,所以我认为更好的解决方案是将其集成到程序中,因此无论我使用哪个编译器,它都可以正常工作,甚至不必考虑之后,一旦指定,我必须添加哪些目录。
根据我的理解,你做到了:
#include <absolute/path/to/header/header.h
或
#include <relative/path/to/header/header.h
但是在标题.h中包括了一些其他包含。
#include <header_1.h>
#include <header_2.h>
[...]
#include <header_n.h>
那些其他标头没有相对/绝对路径,因此编译器不知道如何找到它们。
要解决此问题,您可以使用(使用 gcc)-I
编译器选项:
-我目录
将目录目录添加到要在预处理期间搜索头文件的目录列表中。[...]
强调我的
所以你可以使用
#include <header.h>
在您的文件中并使用
gcc ... -I/path/to/headers ...
当您必须在 compile 命令中指定一个或多个包含路径时,可以执行以下操作:
g++ -I/path1/to/headers -I/path2/to/headers YourProgram.cpp
包含路径告诉编译器它在哪里可以找到它实际应包含到其他文件中的文件。这(通常)通过编译器选项进行控制,如本答案中解释的 LP。
C++标准没有提供任何从C++源文件中执行此操作的工具,而且我不知道任何供应商的任何编译器扩展都允许这样做,所以运气不好......
现在,根据您使用的IDE(希望您正在使用一个...),但是,您很可能可以在那里单独添加文件的包含路径(如果不允许,将是一个奇怪的IDE...),例如,使用eclipse + GCC,右键单击文件,选择"属性" -> C/C++ Build -> 工具设置-> GCC C++编译器->包含。
或者,您可以使用 make 文件代替(实际上,标准设置中的 eclipse 会自动为您生成一个...),这再次允许您为每个文件单独设置编译器选项 - 您可以直接编写或由其他一些工具生成,例如 cmake。
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 使用mongocxx驱动程序时包含头文件问题
- 如何在h文件中包含.o对象文件
- 在混合代码库中将C转换为C++时出现许多包含错误
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中
- 为什么您需要C++头文件的包含保护
- 无法在UE4中包含BP类到CPP类
- g++ 说函数不存在,即使包含正确的标头
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- Visual C++GC接口如何启用它以及要包含哪个库
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)