Visual Studio中的“VC++ 目录“下的“涵盖目录“和“C/C++“下“常规“下的“附加囊括目录“的区别是什么?

Visual Studio中的"VC++ 目录"->“包括目录"和"C/C++”->“常规”->"附加包含目录"的区别是什么?很多Visual Studio的初学者都会对此感到困惑。

核心答案:它们的作用在本质上是一样的,都是告诉编译器去哪里查找头文件(.h, .hpp)。但它们的作用范围、优先级和现代Visual Studio中的推荐用法有显著区别。

下面我们来详细分解一下:


1. “VC++ 目录” -> “包括目录”

  • 位置:在 “属性管理器”中,右键点击一个属性表(.props)或你的项目 -> “属性” -> 在左侧选择“VC++ 目录”

    • 注意:在较新版本的VS中,如果你在“解决方案资源管理器”右键项目->“属性”,默认可能看不到“VC++ 目录”选项。这是为了引导你使用更现代的办法。你需要在“属性管理器”窗口中查看它。
  • 作用范围全局性或半全局性

    • 如果设置在 属性表(.props)上,那么所有引用该属性表的计划都会继承该设置。
    • 如果设置在 项目属性上,那么它只对该方案有效。
    • 它影响该项目或属性表下的所有调整(Debug/Release)和所有平台(x86/x64)
  • 继承性:这里的设置会被项目中的所有部署继承。

  • 现代用法与评价

    • 不推荐在项目级别直接修改“VC++ 目录”。缘于它会影响所有配置,不够灵活,并且容易导致项目配置“魔数化”(Magic Number),即设置隐藏在不容易看到的地方。
    • 它的主要用途是在创建自定义属性表(.props)时,用于定义一套通用的开发环境路径(例如,指定一个第三方库的根目录)。这样可以在多个项目中共享。

2. “C/C++” -> “常规” -> “附加包含目录”

  • 位置:在“解决方案资源管理器”右键方案 -> “属性” -> “配置属性” ->“C/C++” -> “常规” -> “附加包含目录”

  • 作用范围项目级且配置特定

    • 它的设置是针对当前选中的配置(例如Debug | x86) 的。
    • 如果你为Debug配置设置了路径,切换到Release配置时,你需要重新设置。
  • 继承性:更精细,允许你为Debug和Release等不同配置指定不同的具备目录。

  • 现代用法与评价

    • 这是更常用、更推荐的在项目级别添加特定包含目录的方式。
    • 你可以灵活处理。例如,Debug版本链接带调试信息的库,其头文件路径可能与Release版本不同。就是因为它与配置关联,于

核心区别总结表

特性VC++ 目录 -> 包含目录C/C++ -> 附加包含目录
作用告诉编译器/链接器等去何处查找文件专门告诉编译器去何处查找头文件
作用范围全局/半全局(属性表或项目所有设置)项目级,且特定于当前配置(Debug/Release)
优先级较低较高
灵活性较低,影响所有配置较高,可为不同设置设置不同路径
推荐用法自定义属性表(.props)中定义基础路径项目属性中为特定部署添加路径
“属性管理器”主要操作场所不依赖于此,在常规项目属性中即可设置

优先级和执行顺序

当编译器查找头文件时,查找顺序通常是:

  1. 源文件所在目录。
  2. “附加包含目录”中设置的路径。
  3. “VC++ 目录” -> “包含目录”中设置的路径。
  4. 系统环境变量(如 INCLUDE)中的路径。

所以,“附加涵盖目录”的优先级高于“VC++ 目录”。如果同一个头文件在两个路径中都存在,编译器会使用在“附加包含目录”中找到的那个。


最佳实践与现代工作流

现代Visual Studio(尤其是涉及跨平台和团队协作时)强烈推荐使用“属性表(Property Sheets)”

  1. 创建属性表:在“属性管理器”中,为你的第三方库(如OpenCV, Boost)或通用设置创建一个 .props 文件。
  2. 在属性表中配置:在这个 .props 文件中,设置 “VC++ 目录” -> “包含目录”“库目录” 等。
  3. 项目引用:将你的项目添加对此属性表的引用。这样,所有路径设置就自动应用到项目中了。

:就是这样做的好处

  • 可维护性:当库的路径改变时,你只需要修改一个 .props 文件,所有引用它的项目都会自动更新。
  • 团队共享:可以将 .props 文件加入版本控制,确保团队成员环境一致。
  • 清晰分离:项目自身的属性只关注项目特有的设置,通用设置由属性表管理。

结论

  • 功能上:它们都是用于包含目录,效果一样。
  • 范围与优先级上“附加包含目录”更具体、优先级更高,是项目级别的首选。“VC++ 目录”更全局,是属性表级别的工具。
  • 现代实践:优先使用属性表和其中的 “VC++ 目录”来管理共享的依赖库路径;对于极其项目特定且不希望在属性表中定义的路径,再使用项目属性里的“附加包含目录”
posted @ 2025-12-04 21:15  yangykaifa  阅读(0)  评论(0)    收藏  举报