VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 834|回复: 1

[原创] 修复被破坏的 vs 工程设置(续)

[复制链接]
70_avatar_middle
最佳答案
0 
在线会员 发表于 2020-8-9 18:41:50 | 显示全部楼层 |阅读模式
缘起
在上一篇文章——《修复被破坏的 vs 工程设置》中,我分享了修复被破坏的 vs 工程设置的实战。本以为圆满解决了问题,没想到另有玄机。所以又来分享一篇刨根问底的文章。
查看文件
打开 Microsoft.Cpp.Win32.user.props 一看,里面并没有任何有用的内容!如下图:
修复被破坏的 vs 工程设置(续)
看来,默认的 包含目录 和 库目录 的值不是从这里来的!虽然可以在这里添加自定义的值。对比看一下 vs 工程设置中的 包含目录 和 库目录 的值,如下图:
修复被破坏的 vs 工程设置(续)
显然,包含目录 和 库目录 的值不为空。接下来的任务是调查到这两个值是从哪里来的(只看包含目录的值就可以了,库目录的值可以用类似的方法查)。应该根据什么线索来调查呢?
还是搜索
包含目录的值应该保存在某个地方(配置文件或者注册表),不能凭空出来这么一个东东。还是优先在本地硬盘搜索,继续使用 File Locator,搜索 WindowsSDK_IncludePath。
修复被破坏的 vs 工程设置(续)
有很多条记录。因为我使用的是 vs2013,对应的版本是 v120,从搜索结果中的文件路径可以猜测,ARM 是编译 ARM 平台程序用的,Win32 是编译 32 位程序用的,x64 是编译 64 位程序用的。所以,我严重怀疑上图中高亮的这条记录。修改这个文件的内容(需要管理员权限),如下图:
修复被破坏的 vs 工程设置(续)
在 vs 中验证一下,打开之前的工程,查看对应的工程属性,如下图:
修复被破坏的 vs 工程设置(续)
果然已经变成了修改后的值,说明猜对了!至此,我们已经知道包含目录的值是从 Toolset.props 中获取的,是由 $(VC_IncludePath) 和 $(WindowsSDK_IncludePath) 组成的,那这两个宏的值是从哪里来的呢?我以追查 WindowsSDK_IncludePath 的值为例展开。
WindowsSDK_IncludePath
继续使用 File Locator 继续搜索,搜索结果如下图:
修复被破坏的 vs 工程设置(续)
看了一圈,只有 C:\Program Files (x86)\Windows Kits\8.1\DesignTime\CommonConfiguration\Neutral\Windows.props 文件比较可能是定义 WindowsSDK_IncludePath 的地方。其它几个文件都是在使用。
修改 Windows.props 中的 WindowsSDK_IncludePath 为空(需要管理员权限),如下图:
修复被破坏的 vs 工程设置(续)
再次使用 vs 打开工程文件,查看包含路径的值,果然是我们修改后的值。
修复被破坏的 vs 工程设置(续)
More
如果你足够细心,会发现在确定 IncludePath 的值的时候,只有当 IncludePath 是空的时候,才会使用配置文件中对应的值。我把 Toolset.props 中的关键语句粘贴如下:
1
copy<IncludePath Condition="'$(IncludePath)' == ''">$(VC_IncludePath);$(WindowsSDK_IncludePath);</IncludePath>
Condition="'$(IncludePath)' == ''" 表示,当 $(IncludePath) 的值是空才取后面的值。如果 IncludePath 不为空,就不会取后面的值了。
IncludePath 可能会在哪里被赋值呢?我们可以自己设置 IncludePath 的值吗?答案是肯定的。
如果有一个名为IncludePath 的环境变量,结果会是什么样的呢?请看下面的视频:
修复被破坏的 vs 工程设置(续)
看来,确实可以通过环境变量来设置 vs 中的宏。
总结
  • .props 文件中可以设置一些预定义的值,在 .vcxproj 文件中 import 对应的 .props 文件即可使用。
  • 我们可以通过环境变量的值设置 vs 中使用的宏的值。
  • 搜索文件内容,请用 File Locator。
参考资料
《Inside the Microsoft Build Engine —— Using MSBuild and Team Foundation Build》

评分

参与人数 1热心值 +3 收起 理由
75_avatar_small wl1383838438 + 3 赞一个!

查看全部评分





上一篇:DBG直连XP 教材在B站
下一篇:Window证书库中证书解析
50_avatar_middle
最佳答案
0 
在线会员 发表于 2020-8-9 21:23:12 | 显示全部楼层
厉害了我的歌6666666666666666666666666
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-9-29 18:16

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表