-
-
Notifications
You must be signed in to change notification settings - Fork 917
Closed
Description
Xmake 版本
2.7.9
操作系统版本和架构
Windows 11
描述问题
如图所示,xmake中os.getenvs()返回的环境变量全为大写,而实际存在的一些环境变量是有小写的。如果不合并,在使用os.exec()的时候就会存在问题,见 https://stackoverflow.com/questions/75445876/cannot-set-path-in-windows-from-boostprocess/75446143#75446143 。这是因为win32 api的CreateProcessW中lpEnvironment是区分大小写的。
已经导致的问题:例如 #3124 package.tools.cmake.buildenvs(package)生成了不合法的环境变量。
期待的结果
最好的办法是getenv()能获取到正确大小写的环境变量。win32 GetEnvironmentStrings返回的环境变量是区分大小写的,但不知道为什么xmake里就变成全大写了。
如果不修改getenv(),xmake内部可以修改os.joinenv()来处理一部分情况,但xmake中用到os.getenvs和os.setenv的地方不止这一处,很有可能在别的地方仍有隐患。可以在os.execv加一个检查,如果存在字符相同但大小写不同的环境变量就报错。
工程配置
No response
附加信息和错误日志
No response
Reactions are currently unavailable
