5

在尝试使用 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: '(set' : return code '0xc0000135'

停止。

当我执行详细的 Google/StackOverflow 搜索时,我找不到任何与(set PATH=...;%PATH:)=^)%)失败问题相关的内容(返回错误代码)。0xc0000135

请注意,nmake持续很长时间(超过 1 小时)愉快地切换目录、运行中间 .exe 以及编译和链接代码文件。

我在 32 位 Visual Studio 2012 Tools 命令提示符下运行nmake(以及运行);configure据我所知,我的所有path变量都已正确设置(它们包括 32 位 Perl 和 32 位 Python 的路径,尽管我认为这与这里无关)。

我重新启动了计算机,并以管理员权限运行了 VS 2012 工具命令提示符(以防它是权限错误),尝试运行nmake,并发生相同的错误。

然后我试图找出错误实际上是什么。那时,我被这个命令行语句的语法难住了,它显然是在 Makefile 触发的 shell 脚本中执行的:

(set PATH=...;%PATH:)=^)%)
                   ^^^^^^ // What do the symbols :)=^)% mean?

我不理解此脚本上下文中的符号:)=^)%

有人能告诉我这些符号在 Windows shell 脚本的上下文中是什么意思吗(在nmakeMakefile 的上下文中执行(使用 VS 2012 构建 32 位 Qt5))?

作为一个附加的可选问题,我能做些什么来克服这个错误并继续构建 Qt5 而不会出现这个错误阻止进度?

4

4 回答 4

9

(set PATH=...;%PATH:)=^)%)是一个字符串替换。help set在命令输出中查找“环境变量替换”以获取更多信息。

该脚本预先添加了 PATH 变量,但在替换期间它会转义正确的括号,因此整行的格式正确。例如,%PATH% 可能包含一个子字符串“Program Files (x86)”,它会set在扩展时破坏语法。括号前的^符号只是一个批处理转义符号。

其次,这(...) & ...是一个分组运算符,允许在同一行上编写多个命令。我不知道为什么脚本作者决定将这两个命令放在同一行,但它肯定有助于掩盖错误。

第三,虽然 NMAKE 报告了 '(set' 命令的错误,但快速检查证明返回码 (%ERRORLEVEL%) 是由该组的最后一个命令设置的,所以没有用谷歌搜索0xc0000135错误的 SET 和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。

PS 另一种解决方案:通过使用 jom 而不是 nmake解决了类似的问题。

于 2013-04-11T17:57:08.287 回答
1

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

于 2013-07-26T10:13:00.527 回答
0

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

于 2014-07-29T22:00:19.933 回答
0

我遇到了同样的问题,在我的情况下,我使用了一个错误编译的 ICU(用 VS2012 编译)试图将 icu 与 VS2008 一起使用,我用 VS2008 编译 ICU 并在我的 VS2008 项目中使用这些编译版本的 ICU 来解决它。

于 2014-10-28T22:45:17.147 回答