如何在Visual Studio中处理括号形式include指令?

时间:2016-11-25 09:20:12

标签: c++ visual-studio visual-studio-2010 include include-path

您可以通过回答我关于Visual Studio包含行为的以下问题来帮助我吗?

我创建了一个新的C ++项目,它引用了一个已经存在的C ++项目,其源文件不应该被更改。我最终得到以下文件 结构:

-MyProject
+---MyProject.sln
+---MyProject.vcxproj
+---MyProject.cpp
+---CommonHeader.h

-ExistingProject
+---project
+---+---ExistingProject.vcxproj
+---source
+---+---ExistingProject1.h
+---+---ExistingProject2.h
+---+---ExistingProject1.c
+---+---ExistingProject2.c

一开始,我甚至无法编译ExistingProject。在ExistingProject1.c中,存在以下include语句:

#include <ExistingProject1.h> 

here我了解到,在括号包含的情况下,Visual Studio不会在与包含include语句的文件相同的目录中查找Header。所以我的第一个问题是:

  

1)是否为真,我必须将“../source/"-Directory添加到ExistingProject.vcxproj的Include目录中,尽管Header文件已添加到visual Studio项目中?

要使用ExistingProject的结构和功能,我必须将ExistingProject2.h包含到MyProject.cpp中。但是在ExistingProject2.h中,同样包含Statement

#include <ExistingProject1.h>

存在。这导致了我的第二个问题:

  

2)是的,我必须将“../ExistingProject/source/-Directory”添加到MyProject.vcxproj项目的Include目录中吗?

现在出现了一个非常奇怪的问题。如果设置了某个必须在MyProject中设置的定义,则ExistingProject2.h还包括一个外部头文件

#include <CommonHeader.h>

必须由依赖项目定义。这导致了我的上一个问题:

  

3)这是真的,我只有以下两个选项来编译这个外部头文件吗?

     
      
  1. 我必须在结帐时将CommonHeader.h复制到“ExistingProject \ source \” - 目录中。
  2.   
  3. 我必须将“。” - 目录添加到MyProject.vcxproj项目的Include目录中,我必须将“../../MyProject/"-Directory”添加到ExistingProject.vcxproj的Include目录中。< / LI>   

第二种选择没有意义。第一个真的是我唯一选择处理这个包含外部头文件的括号形式吗?

并且:至少不应该是vcxproj文件旁边的位置,在该项目中使用的头文件的include目录中?

抱歉愚蠢的拼写。我是一个非常糟糕的解释者。 祝大家周末愉快。

2 个答案:

答案 0 :(得分:0)

放置#include <header.h>时 - Visual Studio将在项目设置中的所有指定包含路径中搜索它,这包括Windows SDK和标准库所在的默认路径。请参阅此屏幕截图,例如:nclude

如果您将C:\path1\path2放入包含目录,则最终可能会使用#include <..\path1.h>

如果是#include "quotes.h" - Visual Studio将仅搜索存储文件的项目目录中的文件。如果将其他文件放在项目的某些子文件夹中 - 您始终需要指定相对路径(如#include "subfolder\header.h")。

如果您需要进一步澄清,请与我们联系。

答案 1 :(得分:0)

这是Visual Studio如何使用括号包含(helm install --name stocktrader-db2 ibm-charts/ibm-db2oltp-dev --set db2inst.instname=db2inst1 --set db2inst.password=start1a --set options.databaseName=STRADER --set peristence.useDynamicProvisioning=true --set dataVolume.size=20Gi --set dataVolume.storageClassName=ibmc-block-gold)和引用包含(<>):https://docs.microsoft.com/en-us/cpp/preprocessor/hash-include-directive-c-cpp的确切定义。

摘要:方括号""将严格遵守“包含目录”设置。引号<>也会做“包含目录”,但是会首先搜索本地项目目录。