为啥 Visual Studio 2010 不“解包”系统变量?
Posted
技术标签:
【中文标题】为啥 Visual Studio 2010 不“解包”系统变量?【英文标题】:Why does not Visual Studio 2010 "unpack" system variable?为什么 Visual Studio 2010 不“解包”系统变量? 【发布时间】:2012-07-31 01:54:55 【问题描述】:我试图设置一个 Ogre3D 应用程序,并将一个“OGRE_HOME”系统变量设置为 SDK 的主目录。然后我使用$(OGRE_HOME)
系统变量设置项目属性,例如项目属性中的包含目录。但是当我尝试编译应用程序时,编译器没有找到头文件,所以我不得不将 SDK 路径“硬编码”到项目属性中。
我首先使用setx
命令设置变量,然后尝试将其移至系统变量,但没有帮助。但是我没有尝试重新启动系统。
【问题讨论】:
如 setx 文档中所述,新环境变量不适用于现有进程。 【参考方案1】:MSBuild 确实扩展环境变量。 $(OGRE_HOME)
应该可以正常工作。
唯一的问题是 Visual Studio 会大量缓存这些环境变量的值,因此您所做的更改不会立即反映。
修改环境变量的值一般有两种方式,VS都会出错:
从命令行更改值只会影响从命令行启动的应用程序。由于您可能是通过资源管理器从快捷方式启动 VS,因此它不会继承新值。
通过计算机属性更改值应该正常工作,因为该对话框广播 a global message 指示持久环境变量已更改。不幸的是,VS 似乎没有听取这些消息并更新其缓存。
但是,重新启动(或注销并重新登录)应该可以解决问题,因为这会导致 VS 刷新环境变量的值。
还值得注意的是,user macros 是环境变量的替代品。 VS 2010 提供了一种通过 Property Manager 实现这些的非常强大的方法。您可以使用您的设置创建一个项目属性表,然后可以将其附加到多个项目,以便它们都将继承这些设置。它在 VS 之外不起作用,但如果你在那里完成所有的开发工作,它会非常方便。
【讨论】:
以上是关于为啥 Visual Studio 2010 不“解包”系统变量?的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2010在编译c++时为啥有错误也没有下划波浪线?
为啥这段代码不能在 Visual Studio 2010 中编译和运行?
为啥 Visual Studio 2010 (msbuild?) 构建速度不快?
为啥 Visual Studio 2010 (Intellisense) 会停止生成接口指针?