那么,Windows 中环境变量的嵌套深度是否有限制?我做了很多开发工作,并尝试设置我的开发环境变量,其中很多变量相互嵌套。
GLEW=%THIRD_PARTY_ROOT%\GLEW
GLEW_1_5_5=%GLEW%\glew-1.5.5
GLEW_BIN_PATH=%GLEW_ROOT%\bin
GLEW_INCLUDE_PATH=%GLEW_ROOT%\include
GLEW_LIB_PATH=%GLEW_ROOT%\lib
GLEW_ROOT=%GLEW_1_5_5%
OSG=%THIRD_PARTY_ROOT%\OpenSceneGraph
OSG_2_8_3=%OSG%\OpenSceneGraph-2.8.3
OSG_BIN_PATH=%OSG_ROOT%\bin
OSG_INCLUDE_PATH=%OSG_ROOT%\include
OSG_LIB_PATH=%OSG_ROOT%\lib
OSG_ROOT=%OSG_2_8_3%
THIRD_PARTY_ROOT=C:\dev\third-party
但我花了很长时间才让它们真正正确扩展。有一段时间,当我查看 set 的输出时,我只是看到它们似乎按顺序扩展,因此任何依赖于 foo_ROOT 的都没有正确扩展。我尝试启用延迟扩展,但这没有帮助,但重新启动似乎有用...所以也许延迟扩展需要重新启动。
不管怎样,我的 PATH 变量中有 GLEW_BIN_PATH 和 OSG_BIN_PATH,但它们拒绝扩展。这真的很令人沮丧,因为 dll 驻留在那儿,当然我可以让其他所有东西都扩展……有什么想法吗?
我将它们放在 PATH 变量中,如下所示:
[everything else....];%GLEW_BIN_PATH%;%OSG_BIN_PATH%
因此我看不出有什么明显的原因阻止它们扩张。
有什么建议么?
答案1
根据http://support.microsoft.com/?kbid=830473命令提示符会忽略从父进程继承的任何环境变量,并且这些变量的长度超过了它自己的 2047 或 8191 个字符的限制(根据操作系统而定)。您的 PATH 中带有“[其他所有....];”的长度是否超过了这个值?
您是否尝试过将变量添加到 %PATH% 的开头:例如%PATH%=%GLEW_BIN_PATH%;%OSG_BIN_PATH%;%PATH%;[everything else....];
?