vs2019中的属性页使用说明

简单来说,这是一个 "全局设置" vs "局部设置" 以及 "编译器设置" vs "链接器设置" 的问题。

把编译链接过程分成两大阶段:

  1. 编译阶段 (Compile):将 .cpp 源文件变成 .obj 目标文件。
    ○ 需要:头文件 (.h, .hpp)。
    ○ 负责方:C/C++ 编译器。
  2. 链接阶段 (Link):将所有的 .obj 文件和库文件 "粘合" 成一个可执行文件 (.exe) 或动态库 (.dll)。
    ○ 需要:库文件 (.lib)。
    ○ 负责方:链接器 (Linker)。
    理解了这两个阶段,我们再来看这些目录的作用:
    配置位置 配置项 作用于哪个阶段? 用来找什么?
    VC++ 目录 包含目录 编译阶段 头文件 (.h, .hpp)
    C/C++ 附加包含目录 编译阶段 头文件 (.h, .hpp)
    VC++ 目录 库目录 链接阶段 库文件 (.lib)
    链接器 附加库目录 链接阶段 库文件 (.lib)
    链接器 附加依赖项 链接阶段 具体的库文件名 (如 opengl32.lib)
    看到这里你可能会问:那"包含目录"和"附加包含目录"有什么区别?"库目录"和"附加库目录"又有什么区别?

"VC++ 目录" vs "C/C++/链接器 中的附加目录"

这是问题的关键,区别在于 作用域和优先级。

  1. VC++ 目录 - 全局/项目级设置
    ● 包含目录: 你在这里设置的路径,对整个项目(包括所有子项目,如果你在解决方案级别设置,则对解决方案下所有项目)都有效。它是一种全局的、共享的路径设置。
    ● 库目录: 同上,是全局的库文件查找路径。
    特点:
    ● 继承性:这些设置会被项目中的所有配置(Debug/Release)和所有平台(x86/x64)继承。
    ● Visual Studio 级别:在老版本VS中,它甚至可以被设置为系统环境变量级别的全局设置,现在更推荐在项目属性中设置。
    ● 优先级较低:当与"附加"目录冲突时,通常"附加"目录的优先级更高。
  2. C/C++ 中的"附加包含目录" & 链接器中的"附加库目录" - 配置级设置
    ● 附加包含目录: 这个设置是针对 特定的项目配置(例如,仅对当前项目的 Debug x64 配置有效)。如果你切换到 Release x86 配置,这里的设置是不同的。
    ● 附加库目录: 同上,是针对特定配置的库路径。
    特点:
    ● 灵活性高:你可以为Debug版本和Release版本设置不同的头文件或库路径。例如,Debug版本链接调试版的库,Release版本链接发布版的库。
    ● 优先级高:编译器/链接器在查找时,通常会优先在这些"附加"目录中搜索。
    ● 推荐用法:对于项目具体依赖的第三方库,更推荐放在这里,因为它更精确,不会影响到其他不相关的配置或项目。

路径到底该放在哪个位置?【最佳实践】

这是一个经验和习惯问题,但遵循以下原则会让你的项目更清晰、更易于管理:

  1. 系统级、公共的、几乎所有项目都要用的库
    ○ 例如:Windows SDK, VC Runtime 的路径。
    ○ 放置位置:通常由VS自动设置,你一般不需要修改 VC++ 目录。如果你自己安装了一些全局库,可以考虑放在这里,但不推荐。
  2. 本项目专用的第三方库 (最常见的情况!)
    为什么? 因为这样你可以为Debug和Release配置设置不同的路径。例如:
    ○ 场景:你的项目依赖于 OpenCV, Boost, SDL2 等。你希望Debug配置用opencv_world455d.lib,Release配置用opencv_world455.lib。
    ○ 放置位置:
    ■ 头文件路径:放到 C/C++ -> 附加包含目录。
    ■ 库文件路径:放到 链接器 -> 附加库目录。
    ■ 具体的库文件名:放到 链接器 -> 附加依赖项。
    ○ Debug配置的附加库目录: D:\Libraries\OpenCV-4.5.5\lib\Debug
    ○ Release配置的附加库目录: D:\Libraries\OpenCV-4.5.5\lib\Release
  3. 解决方案中多个项目共享的库
    ○ 如果你的解决方案里有多个项目(比如一个MathLib和一个依赖它的MainApp),你可以:
    ■ 方法A (推荐):使用 属性表 (.props文件)。创建一个公共的 .props 文件,在里面设置附加包含目录和附加库目录,然后让所有项目都引用这个属性表。这是最专业、最可维护的方式。
    ■ 方法B:在解决方案级别设置 VC++ 目录。但这样不够灵活,容易造成配置混乱。

总结与类比

你的选择 优点 缺点 适用场景

使用"附加..."目录 灵活、精确、安全。可以针对不同配置(Debug/Release)设置不同路径,是当前的最佳实践。 需要在每个项目的不同配置中分别设置。 绝大多数情况,特别是项目引入第三方库时。

使用"VC++目录" 方便。设置一次,所有配置和项目都生效。 不灵活、危险。容易造成不同配置间的冲突(例如Debug配置错误链接了Release的库)。 已逐渐被属性表取代。不建议在新项目中主动使用。

一个简单的比喻:

● VC++ 目录 就像系统的 PATH 环境变量,是全局的。

● 附加包含/库目录 就像你在某个应用的快捷方式里设置的"起始位置",是局部的、针对特定应用的。

最终建议

对于新手和绝大多数项目:

● 永远只使用 "C/C++ -> 附加包含目录" 和 "链接器 -> 附加库目录"。

● 完全忽略 "VC++ 目录" 里的 "包含目录" 和 "库目录"。

● 这样能避免绝大多数"配置错乱"的问题,并且能很好地管理Debug和Release版本的差异。

按照这个原则,你的路径设置思路将会非常清晰。

相关推荐
武子康4 小时前
Java-03 深入浅出 MyBatis 增删改查与映射配置详解
java·后端
静心观复4 小时前
.puml文件是什么,怎么用
java
YOU OU4 小时前
SpringBoot 日志
java·开发语言
江南十四行5 小时前
并发编程(二)
java·开发语言
weixin_471383035 小时前
统一缩放单位基础(px、em、rem)
开发语言·javascript·ecmascript
yqcoder5 小时前
数据劫持的双雄:深入解析 Object.defineProperty 与 Proxy
开发语言·前端·javascript
qingfeng154155 小时前
企业微信 API 自动化开发指南:从消息回调到智能运营实战
java·开发语言·python·自动化·企业微信
jonyleek5 小时前
性能就是生命线?规则引擎如何支撑实时决策
java·开发语言·数据库
ZFSS5 小时前
Midjourney Shorten API 的集成与使用
java·前端·数据库·人工智能·ai·midjourney·ai编程