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)中定义基础路径 | 在项目属性中为特定部署添加路径 |
| “属性管理器” | 主要操作场所 | 不依赖于此,在常规项目属性中即可设置 |
优先级和执行顺序
当编译器查找头文件时,查找顺序通常是:
- 源文件所在目录。
- “附加包含目录”中设置的路径。
- “VC++ 目录” -> “包含目录”中设置的路径。
- 系统环境变量(如
INCLUDE)中的路径。
所以,“附加涵盖目录”的优先级高于“VC++ 目录”。如果同一个头文件在两个路径中都存在,编译器会使用在“附加包含目录”中找到的那个。
最佳实践与现代工作流
现代Visual Studio(尤其是涉及跨平台和团队协作时)强烈推荐使用“属性表(Property Sheets)”。
- 创建属性表:在“属性管理器”中,为你的第三方库(如OpenCV, Boost)或通用设置创建一个
.props文件。 - 在属性表中配置:在这个
.props文件中,设置 “VC++ 目录” -> “包含目录”、“库目录” 等。 - 项目引用:将你的项目添加对此属性表的引用。这样,所有路径设置就自动应用到项目中了。
:就是这样做的好处
- 可维护性:当库的路径改变时,你只需要修改一个
.props文件,所有引用它的项目都会自动更新。 - 团队共享:可以将
.props文件加入版本控制,确保团队成员环境一致。 - 清晰分离:项目自身的属性只关注项目特有的设置,通用设置由属性表管理。
结论
- 功能上:它们都是用于包含目录,效果一样。
- 范围与优先级上:“附加包含目录”更具体、优先级更高,是项目级别的首选。“VC++ 目录”更全局,是属性表级别的工具。
- 现代实践:优先使用属性表和其中的 “VC++ 目录”来管理共享的依赖库路径;对于极其项目特定且不希望在属性表中定义的路径,再使用项目属性里的“附加包含目录”。

浙公网安备 33010602011771号