【问题标题】:Visual Studio C++ add standard header location only with environment variableVisual Studio C++ 仅使用环境变量添加标准标头位置
【发布时间】:2019-10-22 16:16:30
【问题描述】:

我的项目中有一个无法更改的外部依赖项。它是用一些非常复杂的 Python 构建的,它调用了更多的构建工具。

这一切最终归结为编译错误:C++ 只是找不到头文件。

头文件是这样包含的:

#include <sqlite3.h>

问题:

是否可以仅借助环境变量将自定义包含目录添加到 Visual Studio C++。如果是 - 如何?

我无法更改解决方案、项目或源文件 - 它们都在自动下载

我正在使用最新的 Visual Studio - 2017

【问题讨论】:

  • 不知道环境变量(这真的你的要求还是这是一个经典的xy问题?),但如果你的问题是'添加标题位置而不修改项目文件'然后这里的原则stackoverflow.com/questions/15141429/…(使用AdditionalIncludeDirectories而不是PreprocessorDefinitions)或这里stackoverflow.com/questions/2676417/…工作。
  • @Yuri,嗨,朋友,这个问题有什么更新吗?如果环境变量不起作用,也许你可以尝试使用 Directory.build.props 文件。

标签: c++ visual-studio environment-variables


【解决方案1】:

是否可以将自定义包含目录添加到 Visual Studio C++ 仅借助环境变量。

恐怕答案是否定的。仅使用环境变量是不可能实现这个目标的。

  1. 请查看this:在VS中编译项目时,如果编译器遇到#include语句,会尝试打开指定文件。如果文件是绝对路径,它只会尝试从该特定路径加载。

如果文件是相对路径,它会首先尝试从正在编译的文件的目录中加载。如果在与 cpp 文件相同的文件夹中找不到该文件,则编译器会尝试其“包含目录”列表中的每个路径来查找该文件。

  1. 在VS IDE中,我们可以设置Include Directories或者Additional Include Directories来设置搜索路径。所以如果我有一个头文件Test.h,并且我使用#include &lt;AbsolutePath\Test.h&gt;这样的语句,编译器可以找到标题。

如果我使用#include &lt;Test.h&gt; 之类的语句,则在设置搜索路径之前无法找到头文件。在这种情况下,我可以为所有调试和发布设置Additional Include Directories,以使编译器找到头文件(Test.h 位于公司文件夹中):

注意:但是我们应该知道的一点是,大多数时候,当我们更改 Project=>Properties 中的设置时,我们实际上是在修改项目文件。(xx.vcxproj)。

如上所述,我们无法对项目文件进行任何更改,所以 我们无法通过这种方式实现目标。相反,我认为你可以尝试 使用 Directory.build.props 文件。

创建一个 Directory.Build.props 文件,将其移动到项目文件夹的根目录。对我来说:C:\Users\userName\source\repos 文件夹。添加如下内容:

<Project>
 <ItemDefinitionGroup>
    <ClCompile>
      <AdditionalIncludeDirectories>C:\Company;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
    </ClCompile>
  </ItemDefinitionGroup>
</Project>

我们可以把头文件放到C:\Company(可以这样指定我们的文件夹)文件夹下编译器可以找到。此外,我们不会对解决方案、项目或源文件进行任何更改。

如果有帮助请告诉我:) 任何反馈都可以随时与我联系。

【讨论】:

    猜你喜欢
    • 2021-08-29
    • 2014-01-21
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2021-09-17
    相关资源
    最近更新 更多