有没有办法从 C++ 代码添加包含目录?

Posted

技术标签:

【中文标题】有没有办法从 C++ 代码添加包含目录?【英文标题】:Is there a way to add include directory from C++ code? 【发布时间】:2014-05-27 20:08:38 【问题描述】:

我有一个项目,它的 vcxproj 文件是在编译之前通过在构建过程中使用脚本自动生成的。

此项目依赖于安装在构建机器上已知位置的 boost 库。

项目头文件声明:

#include "boost/foreach.hpp"

这迫使我手动将 boost 根文件夹的路径添加到 vcxproj 文件中的 Additional Include Directories 字段。

由于项目文件是自动生成的,它迫使我将构建过程分成两个阶段并在其间编辑项目文件。

我也尝试过更改源文件并在#include语句中添加完整路径:

#include "<path to boost root>/boost/foreach.hpp"

但随后一些boost 内部包含失败。这意味着我不能以这种方式继续。

我已通读Set #include directory from C++ code file,发现没有从代码中添加路径的选项。

由于我现在在 VS2012/C++11 环境中,我想知道 VS2012/C++11 中是否有任何变化?

使用代码语句添加Include目录还是不行吗?

【问题讨论】:

也许使用某种#pragma 是可能的,但我对此表示怀疑。为什么不改生成vcxproj文件,添加include目录呢? #include "&lt;path to boost root&gt;" 通常在编译器选项中添加 /I &lt;path to boost root&gt; @πάνταῥεῖ - 我使用devenv mySolution.sln Release /rebuild 命令行 - 我应该简单地添加/I &lt;path to boost root&gt;吗? 如果你是通过一些脚本或其他工具自动生成vcxproj,为什么不能在生成时添加路径到Boost? @NirMH 不,我认为您不能将编译器开关传递给devenv。获取构建脚本以生成具有正确设置的 vcxproj。另一种选择是让构建机器设置一个环境变量,比如BOOST_ROOT,它指向boost 安装目录。您可以在 vcxproj 中将其引用为 $(BOOST_ROOT) 【参考方案1】:

你的意思是动态的?不,没有办法。原因很简单:

当你运行你的程序时,它已经被编译了,因此编译器必须知道编译时要包含的所有文件。

您似乎在使用CMake。如果是这种情况,我建议您在 CMake 文件中添加包含目录。

【讨论】:

【参考方案2】:

首先,这样做:

#include "&lt;path to boost root&gt;/boost/foreach.hpp"

应该强烈反对。通过这样做,您使您的源代码只能在您的环境中构建 - 随着项目的增长,更改路径或其他开发人员构建它将是一场噩梦。而且,正如您所发现的,您将破坏链中进一步包含的使用相对路径的任何标头。

什么样的脚本正在生成您的项目?它是自定义的,还是众所周知的构建工具,例如 SCons 或 CMake?正确的解决方案是修复您的构建脚本,以便它正确生成具有附加包含路径的项目。

【讨论】:

感谢您的评论 - 看起来唯一的方法是修改构建脚本 - 这是一个自定义脚本 - 不使用 CMake 或 SCons...

以上是关于有没有办法从 C++ 代码添加包含目录?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法添加用户使用 C++ 输入的行数?

有没有办法通过按下按钮从 JS 向 C++ 发送 http 请求

android ndk调试C++ 代码怎么打印异常信息?

如何将 .exe 从 C++ 项目复制到 C# 项目的输出目录?

Python:有没有办法过滤 c++ 文件?

区分 C 和 C++ 中的 unix 目录和文件