Qt Creator错误无限循环

4
当我尝试创建一个由在不同国家和时区工作的人开发的项目时,我的控制台一直显示以下错误。他提到这个问题是因为他电脑上的日期/时间与我的不同。我不确定这是否正确,如果是,必须有一种解决方法,而无需更改我的计算机时间以匹配他的时间。如果有其他有助于故障排除的信息,请告诉我,我会更新。我对C++/Qt Creator有点陌生。为什么会发生这种情况?它似乎永远不会完成,只是无限地将此打印到控制台。 编译输出控制台
Running steps for project Nexus...
Configuration unchanged, skipping qmake step.
Starting: "C:\Qt\Tools\mingw492_32\bin\mingw32-make.exe" 
C:\Qt\5.5\mingw492_32\bin\qmake.exe -spec win32-g++ "CONFIG+=debug" "CONFIG+=qml_debug" -o Makefile ..\Nexus\Nexus.pro
C:\Qt\5.5\mingw492_32\bin\qmake.exe -spec win32-g++ "CONFIG+=debug" "CONFIG+=qml_debug" -o Makefile ..\Nexus\Nexus.pro
C:\Qt\5.5\mingw492_32\bin\qmake.exe -spec win32-g++ "CONFIG+=debug" "CONFIG+=qml_debug" -o Makefile ..\Nexus\Nexus.pro
C:\Qt\5.5\mingw492_32\bin\qmake.exe -spec win32-g++ "CONFIG+=debug" "CONFIG+=qml_debug" -o Makefile ..\Nexus\Nexus.pro

通用信息输出控制台

Warnings while parsing QML type information of C:/Qt/5.5/mingw492_32/qml:
<dump of C:\Qt\5.5\mingw492_32\qml>:1:24: Reading only version 1.1 parts.
<dump of C:\Qt\5.5\mingw492_32\qml>:10:5: Expected only Component and ModuleApi object definitions.

个人资料

#-------------------------------------------------
#
# Project created by QtCreator 2016-02-29T21:37:32
#
#-------------------------------------------------

QT       += core gui xml

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

include(core/core.pri)
include(node/node.pri)
include(librarybox/librarybox.pri)
include(blockeditor/blockeditor.pri)
include(propertyeditor/propertyeditor.pri)
include(lib/lib.pri)


TARGET = Nexus
TEMPLATE = app


SOURCES += main.cpp\
    mainwindow.cpp


HEADERS  += mainwindow.h


FORMS    += mainwindow.ui \
    virtualnamepropertyitem.ui

RESOURCES += \
    nexus_resources.qrc

RC_FILE = nexus.rc

1
具体是什么错误?qmake被多次调用了吗? - maddin45
你可以尝试更改日期/时间来测试它是否真的相关。 - Ilya
@maddin45,我该如何找到代码中调用qmake的位置? - JokerMartini
检查你的.pro文件的修改时间。它可能是未来的时间。 - Zeta
@Zeta,文件中的时间是未来的时间,我该如何修改文件以解决这个问题? - JokerMartini
1
你必须回到未来,马蒂。 - thuga
3个回答

6
如果您的`.pro`文件(或任何其他文件)具有未来的时间戳,就会出现这种情况。`qmake`生成的`Makefile`包含一条规则,当其早于`.pro`文件时,将重新生成`Makefile`。由于新的`Makefile`仍然早于来自未来的对应文件,因此这将持续进行,直到您实际上到达正确的时间。
有两种方法可以消除这种行为:
  1. 等待`.pro`文件的时间戳过去(不建议)
  2. 编辑`.pro`文件。即使像新评论这样微不足道的编辑也足够了。

他甚至可以撤销更改并重新保存。 - JojOatXGME
我尝试过这个,但它仍然在QMake流程中循环。 - JokerMartini
1
@JojOatXGME:没问题,对于类Unix系统来说,只需要使用“touch *.pro”命令即可完成操作,但我不确定Windows系统的相应命令。 - Zeta
@JokerMartini:你在其中关闭了QtCreator,对吧? - Zeta
@Zeta在我修改完pro文件后关闭它了吗?不,我没有这样做。 - JokerMartini
我该如何尝试这个解决方案?https://forum.qt.io/topic/51402/solved-qmake-stuck-in-infinite-loop/3 - JokerMartini

5

我使用最新版本的QtCreator(3.6.1和Qt 5.6.0),遇到了同样的问题。

“Zeta”提出的答案没有帮助。

在项目选项中禁用“Shadow build”可以解决我的问题。这是一个很好的解决方法。

最后,缩短文件名(某些文件名太长)以解决该问题:

  • 缩短项目名称(.pro)(文件名和路径,删除了一些字符)
  • 缩短资源名称(.qrc)(文件名和路径,删除了一些字符)

问题随即消失(即使使用阴影构建,也可能相关,因为阴影构建使用具有非常长名称的输出文件夹)。

当文件路径过长时(> ~170,在论坛上发现了一篇文章报告了这个问题),似乎存在一个错误。

另一种方法是更改QtCreator用于阴影构建的模式。这可以从QtCreator选项中修改,然后您可以使名称更短,这是另一种快速轻松解决问题的方法。


1
当使用阴影构建时,qmake确实会创建非常长的路径:build-<App name>-<Platform>_Qt_<Version>_MinGW_<Architecture>-<Build type>,尽管我很惊讶这个错误在Linux上从未发生,在Windows上却出现了。我正在使用Qt 5.7。您的解决方案确实解决了我的问题,但它在源目录中创建了一些小混乱,因为没有阴影构建,所有内容都放在那里。 - rbaleksandar
@rbaleksandar:将build-<App name>-<Platform>_Qt_<Version>_MinGW_<Architecture>-<Build type>从Qt选项更改为类似于<App name>-mybuild_<Architecture>-<Build type>的较短名称,可以让您继续使用阴影构建并解决问题。 - jpo38
@Gojir4:同意;-) - jpo38
@jpo38 是的,它允许您使用阴影构建,但是对于大型和复杂项目的文件结构会有很大限制。问题在于Windows即使在2017年(现在几乎是2018年)仍然有太多古老的机制。 - rbaleksandar
由于Windows最大路径长度为260个字符,导致其他应用程序受到影响,因此这似乎仍然是2020年的一个问题。 https://bugreports.qt.io/browse/QTBUG-52242 - ClearCrescendo

0
我编写了一个Python脚本,递归地循环遍历项目中的所有文件,并简单地重新保存这些文件。这样可以更新时间戳并纠正QMake无限循环问题。现在它可以正确编译。

能分享一下吗?我也可以写一个(或直接更改时间戳),但如果你能发布你的,那可能会节省我和其他人的时间/麻烦。 - BuvinJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接