Qt moc.exe没有生成* .moc文件

时间:2009-08-29 12:41:45

标签: qt qmake nmake

我正在尝试构建 qtestlib / tutorial1示例,但在运行nmake时没有生成 testqstring.moc 文件(I在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“debug”-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“debug”-I“.... \ Apps \ Qt \ 2009.03 \ qt \ mkspecs \ win32-g ++”-o debug \ 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,但是永远不会生成该文件。

感谢您提供的所有指导。

5 个答案:

答案 0 :(得分:4)

看起来您正在尝试使用nmake使用MinGW进行构建。 nmake是MSVC工具。

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

答案 1 :(得分: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每次从菜单运行时都会生成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已经没有问题了。重建工作也会很好。

希望这会有所帮助;)

答案 2 :(得分:1)

您是否尝试在/ mingw / bin中使用Qt附带的编译器/工具? (在我的系统上,Qt安装在C:\ Qt \ 2009.03。)上次检查时,Qt的非商业版本将无法与Visual Studio一起使用。我刚刚从Qt命令提示符中尝试了这个并且它可以工作。

qmake -project "CONFIG += qtestlib"

qmake

mingw32-make

希望这有帮助。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果还没有使用VC编写nmake,这里有一个解决方法: http://bugreports.qt-project.org/browse/QTBUG-6470