通过程序代码行设置C++包含路径

Setting C++ include path via program code line

本文关键字:C++ 包含 路径 设置 过程 程序 代码      更新时间:2023-10-16

已经列出了许多选项,说明如何向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。