修复被破坏的 vs 工程设置(续)

简介: 修复被破坏的 vs 工程设置(续)

缘起

在上一篇文章——《修复被破坏的 vs 工程设置》中,我分享了修复被破坏的 vs 工程设置的实战。本以为圆满解决了问题,没想到另有玄机。所以又来分享一篇刨根问底的文章。

查看文件

打开 Microsoft.Cpp.Win32.user.props 一看,里面并没有任何有用的内容!如下图:

Microsoft.Cpp.Win32.user.props.png

看来,默认的 包含目录库目录 的值不是从这里来的!虽然可以在这里添加自定义的值。对比看一下 vs 工程设置中的 包含目录库目录 的值,如下图:

vs-project-include-path.png

显然,包含目录库目录 的值不为空。接下来的任务是调查到这两个值是从哪里来的(只看包含目录的值就可以了,库目录的值可以用类似的方法查)。应该根据什么线索来调查呢?

还是搜索

包含目录的值应该保存在某个地方(配置文件或者注册表),不能凭空出来这么一个东东。还是优先在本地硬盘搜索,继续使用 File Locator,搜索 WindowsSDK_IncludePath

search-result-of-WindowsSDK_IncludePath.png

有很多条记录。因为我使用的是 vs2013,对应的版本是 v120,从搜索结果中的文件路径可以猜测,ARM 是编译 ARM 平台程序用的,Win32 是编译 32 位程序用的,x64 是编译 64 位程序用的。所以,我严重怀疑上图中高亮的这条记录。修改这个文件的内容(需要管理员权限),如下图:

modify-IncludePath-value-in-toolset.props.png

vs 中验证一下,打开之前的工程,查看对应的工程属性,如下图:
modified_include_path_value_in_vs.png

果然已经变成了修改后的值,说明猜对了!至此,我们已经知道包含目录的值是从 Toolset.props 中获取的,是由 $(VC_IncludePath)$(WindowsSDK_IncludePath) 组成的,那这两个宏的值是从哪里来的呢?我以追查 WindowsSDK_IncludePath 的值为例展开。

WindowsSDK_IncludePath

继续使用 File Locator 继续搜索,搜索结果如下图:

search-WindowsSDK_IncludePath-in-file.png

看了一圈,只有 C:\Program Files (x86)\Windows Kits\8.1\DesignTime\CommonConfiguration\Neutral\Windows.props 文件比较可能是定义 WindowsSDK_IncludePath 的地方。其它几个文件都是在使用。

修改 Windows.props 中的 WindowsSDK_IncludePath 为空(需要管理员权限),如下图:

clear-WindowsSDK_IncludePath-in-Windows.props.png

再次使用 vs 打开工程文件,查看包含路径的值,果然是我们修改后的值。

modified_include_path_value_in_vs.png

More

如果你足够细心,会发现在确定 IncludePath 的值的时候,只有当 IncludePath 是空的时候,才会使用配置文件中对应的值。我把 Toolset.props 中的关键语句粘贴如下:

<IncludePath Condition="'$(IncludePath)' == ''">$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>

Condition="'$(IncludePath)' == ''" 表示,当 $(IncludePath) 的值是空才取后面的值。如果 IncludePath 不为空,就不会取后面的值了。

IncludePath 可能会在哪里被赋值呢?我们可以自己设置 IncludePath 的值吗?答案是肯定的。

如果有一个名为IncludePath 的环境变量,结果会是什么样的呢?请看下面的视频:

set-incluepath-environment-variable.gif

看来,确实可以通过环境变量来设置 vs 中的宏。

总结

  • .props 文件中可以设置一些预定义的值,在 .vcxproj 文件中 import 对应的 .props 文件即可使用。
  • 我们可以通过环境变量的值设置 vs 中使用的宏的值。
  • 搜索文件内容,请用 File Locator

参考资料

《Inside the Microsoft Build Engine —— Using MSBuild and Team Foundation Build》

相关文章
|
网络协议 Shell Linux
【Shell 命令集合 网络通讯 】Linux 设置和配置PPP pppsetup命令 使用教程
【Shell 命令集合 网络通讯 】Linux 设置和配置PPP pppsetup命令 使用教程
708 0
|
存储 监控 安全
Zabbix登录绕过漏洞复现(CVE-2022-23131)
最近在复现zabbix的漏洞(CVE-2022-23131),偶然间拿到了国外某公司zabbix服务器。Zabbix Sia Zabbix是拉脱维亚Zabbix SIA(Zabbix Sia)公司的一套开源的监控系统。该系统支持网络监控、服务器监控、云监控和应用监控等。Zabbix Frontend 存在安全漏洞,该漏洞源于在启用 SAML SSO 身份验证(非默认)的情况下,恶意行为者可以修改会话数据,因为存储在会话中的用户登录未经过验证。 未经身份验证的恶意攻击者可能会利用此问题来提升权限并获得对 Zabbix 前端的管理员访问权限。
2373 0
Zabbix登录绕过漏洞复现(CVE-2022-23131)
|
存储 SQL 前端开发
【若依RuoYi-Vue | 项目实战】帝可得后台管理系统(二)
接着上回的【若依RuoYi-Vue | 项目实战】基于若依的帝可得后台管理系统(一),本次我们继续完成人员管理、设备管理、策略管理模块的开发。
2804 6
【若依RuoYi-Vue | 项目实战】帝可得后台管理系统(二)
|
机器学习/深度学习 存储 算法
技术好文:ttf文件结构解析
技术好文:ttf文件结构解析
1415 0
|
机器学习/深度学习 人工智能 自然语言处理
GraphRAG入门指南:构建你的第一个知识图谱驱动应用
【10月更文挑战第28天】随着人工智能和机器学习技术的飞速发展,知识图谱(Knowledge Graph)逐渐成为连接数据和智能应用的重要桥梁。GraphRAG(Graph-based Retrieval-Augmented Generation)是一种结合了知识图谱和自然语言处理的技术,能够在生成文本时利用知识图谱中的结构化信息,从而提高生成质量和相关性。作为一名数据科学家和技术爱好者,我有幸深入研究并实践了GraphRAG技术,现将我的经验和心得整理成这份入门指南,希望能帮助初学者快速上手并构建自己的知识图谱驱动应用。
2545 2
|
IDE 开发工具 Python
Python应用中缩进错误(IndentationError)
【5月更文挑战第16天】
1007 2
|
存储 运维
USB3.2 摘录(七)
USB3.2 摘录(七)
467 1
stm32f407探索者开发板(二十三)——定时器中断实验
stm32f407探索者开发板(二十三)——定时器中断实验
2421 0
|
前端开发 JavaScript 搜索推荐
深入探讨单页面应用程序(SPA)的优势与实践
深入探讨单页面应用程序(SPA)的优势与实践
|
存储 监控 数据可视化
性能测试:主流性能剖析工具介绍
**性能剖析**是识别应用性能瓶颈的关键,涉及指标收集、热点分析、优化建议及可视化报告。常用工具有:**JConsole**监控JVM,**VisualVM**多合一分析,**JStack**分析线程,**FlameGraph**展示CPU耗时,**SkyWalking**分布式跟踪,**Zipkin**追踪服务延迟。这些工具助力开发人员提升系统响应速度和资源效率。

热门文章

最新文章