为啥 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) 会停止生成接口指针?

为啥我的visual stdio 2010连错误程序也能编译成功。。。。

为啥以下无法在 Visual Studio 2010 C++ 下编译?