缘起

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

查看文件

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

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

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

还是搜索

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

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

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

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

WindowsSDK_IncludePath

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

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

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

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

More

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

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

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

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

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

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

总结

  • .props 文件中可以设置一些预定义的值,在 .vcxproj 文件中 import 对应的 .props 文件即可使用。

  • 我们可以通过环境变量的值设置 vs 中使用的宏的值。

  • 搜索文件内容,请用 File Locator

参考资料

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

欢迎留言交流!

感谢你的分享,点赞和在看

修复被破坏的 vs 工程设置(续)相关推荐

  1. 修复被破坏的 vs 工程设置

    缘起 前几天打开工作项目进行编译,没想到居然报错,明明前一天编译还正常的.简单排查后,临时修复了问题.但是今天新建工程时居然还有相同的问题,是可忍熟不可忍?本文记录了排查过程,希望对各位小伙伴儿有帮助 ...

  2. 修复被破坏了的linux文件系统分区表

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 原贴:h ...

  3. 【Git】将 GitHub 工程设置为私有库 ( 登录账号 | 工程主页 | Settings | Danger Zone | Change visibility | Make private )

    文章目录 一.将 GitHub 中某个工程设置为私有库 一.将 GitHub 中某个工程设置为私有库 进入 GitHub 工程主页面 , 点击顶部的 Settings 按钮 , ( 注意这里必须登录 ...

  4. maven设置jdk版本(全局设置和工程设置)

    方法一:在maven文件夹下的settings.xml中添加(全局设置) <profile><id>jdk-1.8</id><activation>&l ...

  5. VC6.0的工程设置解读Project--Settings

    做开发差不多一年多了,突然感觉对VC的工程设置都不是很清楚,天天要和VC见面,虽然通常情况下一般都不会修改工程设置,但是还是有必要对它的一些设置项的来龙去脉有一定的了解,所以狂查资料,稍作整理,总结一 ...

  6. VC6.0的工程设置解读Project--Settings - 查志强(转载)

    blogs.com/zhazhiqiang/p/3597622.html 主题 Visual C++ 数据库 [原文: http://wenku.baidu.com/view/f10a241dff00 ...

  7. VC6.0工程设置介绍

    <script src="win.js" type="text/javascript"></script> 打开或新建一个包 含至少一个 ...

  8. Visual Studio的sln工程设置VTK、ITK项目

    Visual Studio的sln工程设置VTK.ITK项目 最近在学习使用VTK和ITK,使用Visual Studio新建Qt项目时发现项目不是使用过去使用的CMake组织,而是使用的Visual ...

  9. VS工程设置_调试报错_无法解析的外部符号LINK2019

    今天调试王纲老师的Push_Stream,Realse成功编译,工程设置从Realse切到Debug时报错,报无法解析的外部符号,以为所需的库文件没包含进. 以下报错: 仔细检查无误.观察Realse ...

最新文章

  1. C++_STL——map、multimap、set、multiset
  2. 明天即将开工,把今年的Flag加到头像上,时刻鞭策自己吧!
  3. Oracle中NVARCHAR2字符集不匹配问题
  4. mac忘记MySQL初始密码
  5. SpringBoot实战(十一):MultipartException: Could not parse multipart servlet request
  6. SpringMVC之安全性(二)登录界面
  7. Windows驱动之编写键盘记录器
  8. VS2005的DEBUG设置
  9. Canvas绘制抽奖转盘
  10. 北大计算机学霸,揭秘:2018北大在京录取的学霸们有何特长(组图)
  11. 因果AI热度背后的打靶迷局
  12. 使用新版Mendeley自动插入参考文献,并修改得到GB/T 7714-2005格式
  13. 用计算机亩换算成平方,亩数和平方换算(平方米换算亩计算器)
  14. 职业选手cfg文件怎么用_游戏id不会取?看看职业选手怎么取id吧!都是满满的干货...
  15. 超全面!Verilog入门到实战系列(1)
  16. 代码优化小技巧-使用enum统一返回code码
  17. C# GDAL 数字图像处理Part10 自动配准/半自动配准
  18. 内部邮件管理的数据库设计和dwz的批量处理
  19. HTML中上传与读取图片或文件(input file)----在路上(25)
  20. word文档损坏怎么恢复

热门文章

  1. DOM节点创建(jQuery)
  2. 2016-2017-2学期《程序设计与数据结构》教学进程
  3. SqlServer和MySQL中存储过程out返回值处理C#代码
  4. ASP.NET 视频截图功能的C#代码
  5. vista任务栏透明_在Windows XP中获取Vista任务栏缩略图预览
  6. android listpreference 自定义,Android – 我的ListPreference中的自定义行布局
  7. java.lang.NoSuchFieldError: EMPTY_ORDERED_ITERATOR起因及解决办法
  8. apache服务器搭建过程中需要注意到的一些问题
  9. Matlab学习------------带有右键菜单的GUI学习实例
  10. VMware虚拟机VMDK 快照 数据恢复成功