有没有办法从 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 "<path to boost root>"
通常在编译器选项中添加 /I <path to boost root>
。
@πάνταῥεῖ - 我使用devenv mySolution.sln Release /rebuild
命令行 - 我应该简单地添加/I <path to boost root>
吗?
如果你是通过一些脚本或其他工具自动生成vcxproj
,为什么不能在生成时添加路径到Boost?
@NirMH 不,我认为您不能将编译器开关传递给devenv
。获取构建脚本以生成具有正确设置的 vcxproj。另一种选择是让构建机器设置一个环境变量,比如BOOST_ROOT
,它指向boost 安装目录。您可以在 vcxproj 中将其引用为 $(BOOST_ROOT)
【参考方案1】:
你的意思是动态的?不,没有办法。原因很简单:
当你运行你的程序时,它已经被编译了,因此编译器必须知道编译时要包含的所有文件。
您似乎在使用CMake
。如果是这种情况,我建议您在 CMake
文件中添加包含目录。
【讨论】:
【参考方案2】:首先,这样做:
#include "<path to boost root>/boost/foreach.hpp"
应该强烈反对。通过这样做,您使您的源代码只能在您的环境中构建 - 随着项目的增长,更改路径或其他开发人员构建它将是一场噩梦。而且,正如您所发现的,您将破坏链中进一步包含的使用相对路径的任何标头。
什么样的脚本正在生成您的项目?它是自定义的,还是众所周知的构建工具,例如 SCons 或 CMake?正确的解决方案是修复您的构建脚本,以便它正确生成具有附加包含路径的项目。
【讨论】:
感谢您的评论 - 看起来唯一的方法是修改构建脚本 - 这是一个自定义脚本 - 不使用 CMake 或 SCons...以上是关于有没有办法从 C++ 代码添加包含目录?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法通过按下按钮从 JS 向 C++ 发送 http 请求