【问题标题】:Qt moc.exe not generating *.moc fileQt moc.exe 不生成 *.moc 文件
【发布时间】:2010-11-23 23:51:33
【问题描述】:

我正在尝试构建 qtestlib/tutorial1 示例,但是当我运行 nmake 时没有生成 testqstring.moc 文件(我是在 Windows XP SP3 上运行 Qt 4.5.2)。
我将 testqstring.cpp 从教程目录复制到我的构建目录 (C:\sandboxes\testqstring) 并从 Qt 命令提示符运行我的 MS Visual 中的 vsvars32.bat 文件安装 Studio 8 以添加 VS 环境变量。

根据教程,我应该运行:

> qmake -project "CONFIG += qtestlib"
> qmake
> nmake

当我这样做时,nmake 的输出是:

C:/Apps/Qt/2009.03/qt/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_TESTLIB_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"....\Apps\Qt\2009.03\qt\include \QtCore" -I"....\Apps\Qt\2009.03\qt\include\QtGui" -I"....\Apps\Qt\2009.03\qt\include\QtTest" -I".... \Apps\Qt\2009.03\qt\include"-I"." -I"....\Apps\Qt\2009.03\qt\include\ActiveQt" -I"调试" -I"....\Apps\Qt\2009.03\qt\mkspecs\win32-g++" -D__GNUC__ - DWIN32 testqstring.cpp -o debug\testqstring.moc

g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_TESTLIB_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"....\Apps\Qt\2009.03\qt\include\QtCore" -I"....\Apps\Qt\2009.03\qt\include\QtGui" -I"....\Apps\Qt\2009.03\qt\include\QtTest" -I"....\Apps\ Qt\2009.03\qt\include"-I"." -I"....\Apps\Qt\2009.03\qt\include\ActiveQt" -I"调试" -I"....\Apps\Qt\2009.03\qt\mkspecs\win32-g++" -o 调试\testqstring.o testqstring.cpp

testqstring.cpp:63:27: testqstring.moc: 没有这样的文件或目录
NMAKE:致命错误 U1077:'C:\Apps\Qt\2009.03\mingw\bin\g++.EXE':返回码 '0x1' 停止。
NMAKE:致命错误 U1077:'C:\PROGRA~1\MICROS~3\VC\BIN\nmake.exe':返回代码 '0x2' 停下来。

所以,我可以看到正在调用 moc.exe 来生成 debug/testqstring.moc,但从未生成过该文件。

感谢您提供的所有指导。

【问题讨论】:

  • 能否包含运行第一个命令时生成的.pro文件?
  • 我遇到了同样的问题。但我通过从 /bin 目录中删除文件 qt.conf 解决了这个问题。

标签: qt qmake nmake


【解决方案1】:

如果尚未使用 VC nmake 进行编译,这里有一个解决此错误的方法: http://bugreports.qt-project.org/browse/QTBUG-6470

【讨论】:

    【解决方案2】:

    我遇到了 moc.exe 没有使用 nmake 生成任何 moc 文件的问题。原因是 Makefile.Debug 中的 moc.exe 路径错误。

    类似:

    C:/Qt/2009.03/qt/bin\moc.exe

    我改成:

    C:\Qt\2009.03\qt\bin\moc.exe

    现在它可以工作了。 ;)

    不幸的是,每次您从菜单运行 qmake 或重建/清理解决方案/项目时,qmake 都会生成 makefile。我认为这是 qmake 配置的错误。

    要永久修复它,您必须找到文件 C:\MyQtDir\mkspecs\win32-msvc2008\qmake.conf。对于其他配置,您必须更改 win32-msvc2008。

    对我来说,它位于 C:\Qt\2009.03\qt\mkspecs\win32-msvc2008\qmake.conf

    搜索短语“QMAKE_MOC”。你会发现一些这样的行:

    QMAKE_MOC               = $$[QT_INSTALL_BINS]\moc.exe
    QMAKE_UIC               = $$[QT_INSTALL_BINS]\uic.exe
    QMAKE_IDC               = $$[QT_INSTALL_BINS]\idc.exe
    

    QT_INSTALL_BINS 是一条似乎错误的路径。目录分隔符仍然是“/”,但应该是“\”。目前我不知道我必须在哪里更改 QT_INSTALL_BINS。但是 qt 路径对我来说不会改变,所以我用硬定义的路径名替换了宏:

    QMAKE_MOC               = C:\Qt\2009.03\qt\bin\moc.exe
    QMAKE_UIC               = C:\Qt\2009.03\qt\bin\uic.exe
    QMAKE_IDC               = C:\Qt\2009.03\qt\bin\idc.exe
    

    现在 moc 已经没有问题了。重建也可以正常工作。

    希望这会有所帮助;)

    【讨论】:

    【解决方案3】:

    您似乎正在尝试使用 nmake 使用 MinGW 进行构建。 nmake 是一个 MSVC 工具。

    如果您想使用 MinGW 进行构建,您必须使用 mingw32-make。如果您想使用 MSVC 进行构建,则必须使用使用 MSVC 构建的 Qt(这意味着您必须自己构建它或拥有商业许可证)。

    【讨论】:

    • 谢谢。我知道这会很简单。 mingw32-make 工作正常。
    【解决方案4】:

    您是否尝试过在 /mingw/bin 中使用 Qt 附带的编译器/工具? (在我的系统上,Qt 安装在 C:\Qt\2009.03 中。)上次我检查时,Qt 的非商业发行版不适用于 Visual Studio。我刚刚在 Qt 命令提示符下尝试过,它成功了。

    qmake -project "CONFIG += qtestlib"
    
    qmake
    
    mingw32-make
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢,mingw32-make 成功了。我认为它只适用于nmake。教程只提到了make和nmake。由于我有 MSVC,我认为 nmake 是正确的工具。显然不是。
    【解决方案5】:

    你确定 moc 没有生成吗?它位于 Debug 目录中,因此您需要 #include "Debug/teststring.moc" 或 #include 以及附加的 -IDebug 编译器选项。

    【讨论】:

    • 如果您查看编译行,您会发现它已经包含 -I"debug"。用户无需在 .pro 文件中明确执行此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多