Dan*_*aum 5 shell qt makefile windows-7 qt5
在尝试使用VS 2012构建Qt5(32位)的障碍过程中,我遇到了另一个构建错误.
它是:
(设置PATH = C:\ Users\daniel347x\Desktop\Backup\__ Dan_Root\qt5\qtbase\lib;%PATH:)= ^)%)&C:\ Users\daniel347x\Desktop\Backup__Dan_Root\qt5\qtbase\bin\uic.exe对话框\ qfiledialog.ui -o ui_qfiledialog.h
NMAKE:致命错误U1077:'(设置':返回代码'0xc0000135'
停止.
当我执行详细的Google/StackOverflow搜索时,我找不到任何与(set PATH=...;%PATH:)=^)%)失败问题相关的信息(返回错误代码0xc0000135).
请注意,nmake很长一段时间(超过1小时)快乐地切换目录,运行中间.exe,以及编译和链接代码文件.
我在32位Visual Studio 2012工具命令提示符下运行nmake(以及运行configure); 据我所知,我的所有path变量都已正确设置(它们包括32位Perl和32位Python的路径,尽管我认为这不是相关的).
我已重新启动计算机,并运行具有管理员权限的VS 2012工具命令提示符(如果是权限错误),尝试运行nmake,并发生相同的错误.
然后我试图弄清楚错误究竟是什么.那时,我对这个命令行语句的语法感到困惑,该语句显然是在Makefile触发的shell脚本中执行的:
(set PATH=...;%PATH:)=^)%)
^^^^^^ // What do the symbols :)=^)% mean?
Run Code Online (Sandbox Code Playgroud)
我不明白这个脚本的上下文中的符号:)= ^)%.
有人可以告诉我这些符号在Windows shell脚本的上下文中是什么意思(在nmakeMakefile 的上下文中执行(使用VS 2012构建32位Qt5))?
作为一个附加的可选问题,我可以做些什么来克服这个错误并继续构建Qt5而不会阻止进度的这个错误?
这(set PATH=...;%PATH:)=^)%)是一个字符串替换.在help set命令输出中查找"环境变量替换"以获取更多信息.
该脚本预先设置了PATH变量,但在替换期间它会转义右侧的parens,因此整行的格式正确.例如,%PATH%可能包含子字符串"Program Files(x86)",它将set在扩展时中断语法.在^该括号前的符号只是一个批次逃逸符号.
其次,它(...) & ...是一个分组运算符,允许在同一行上写入多个命令.为什么脚本作者决定将这两个命令放在同一行上是我不知道的,但它肯定有助于掩盖错误.
第三,虽然NMAKE报告'(set'命令)的错误,快速检查证明返回代码(%ERRORLEVEL%)是由组的最后一个命令设置的,所以没有使用google搜索0xc0000135错误的SET和NMAKE命令.
错误的实际来源是'uic.exe',它位于:
C:\Users\daniel347x\Desktop\Backup__Dan_Root\qt5\qtbase\bin\uic.exe
Run Code Online (Sandbox Code Playgroud)
关于错误,0xc0000135 - 这是The application failed to initialize properly错误.我的猜测是'uic.exe'是使用不兼容的工具链/ SDK构建的,或者需要一些缺少的dll.
PS另一种解决方案:使用jom而不是nmake 解决了类似的问题.