在Windows shell脚本中,什么(设置PATH = ...;%PATH:)= ^)%)意味着什么?以及如何在Qt5 nmake构建的上下文中克服此行的故障?

lsunt 发布于 2019-03-09 makefile 最后更新 2019-03-09 14:31 3 浏览

在尝试build Qt5 (32-bit) with VS 2012obstacle-ridden process的上下文中,我遇到了另一个构建错误。 它是:

(set PATH=C:\Users\daniel347x\Desktop\Backup\__Dan_Root\qt5\qtbase\lib;%PATH:)=^)%) & C:\Users\daniel347x\Desktop\Backup__Dan_Root\qt5\qtbase\bin\uic.exe dialogs\qfiledialog.ui -o ui_qfiledialog.h NMAKE : fatal error U1077: '(set' : return code '0xc0000135' Stop.
当我执行详细的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?
我不明白符号:)= ^)%在这个脚本的上下文中。 有人可以告诉我这些符号在Windows Shell脚本的上下文中是什么意思(这是在nmake Makefile(使用VS 2012构建32位Qt5)的上下文中执行的)? 作为一个附加的可选问题,我能做些什么来克服这个错误,并继续构建Qt5而不会阻塞进度?
已邀请:

psunt

赞同来自:

我有同样的问题。我决定将它添加到库icu的PATH路径。

zrerum

赞同来自:

我在Win8中编译Qt5.3也遇到了同样的问题。解决方案是确保在PATH变量中包含ICUopenSSL 32位二进制文​​件位置。如果你没有uic.exe不能正常工作

jalias

赞同来自:

(set PATH=...;%PATH:)=^)%)是字符串替换。在help set命令输出中查找“环境变量替换”以获取更多信息。 该脚本预先设置PATH变量,但在替换期间它会转义右侧的parens,因此整行的格式正确。例如,%PATH%可能包含子字符串“Program Files(x86)”,它将在扩展时中断set语法。 paren之前的^符号只是一个批量转义符号。 其次,(...) & ...grouping operator,它允许在同一行上写入多个命令。为什么脚本作者决定将这两个命令放在同一行上是我不知道的,但它肯定有助于掩盖错误。 第三,虽然NMAKE报告'(set'命令)的错误,快速检查证明返回代码(%ERRORLEVEL%)是由组的最后一个命令设置的,所以没有使用google搜索SET的0xc0000135错误和NMAKE命令。 错误的实际来源是'uic.exe',它位于:

C:\Users\daniel347x\Desktop\Backup__Dan_Root\qt5\qtbase\bin\uic.exe
关于错误,0xc0000135 - 这是The application failed to initialize properly错误。我的猜测是'uic.exe'是使用不兼容的工具链/ SDK构建的,或者需要一些丢失的dll。 附:另一种解决方案:使用jom代替nmake,类似的问题has been solved

zfugit

赞同来自:

我遇到了同样的问题,在我的情况下,我使用了一个糟糕的编译ICU(用VS2012编译)试图在VS2008上使用icu,我解决了它用VS2008编译ICU并在我的VS2008项目上使用这些编译版的ICU。