我正在尝试构建 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,但是永远不会生成该文件。
感谢您提供的所有指导。
答案 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