Qt moc.exe não gera arquivo * .moc
Pergunta
Estou tentando construir o exemplo qtestlib/tutorial1, mas o testeqstring.moc arquivo não está sendo gerado quando executo nmake
(Estou executando o Qt 4.5.2 no Windows XP SP3).
eu copiei testeqstring.cpp do diretório tutorial para meu diretório build (C:\sandboxes estqstring) e no prompt de comando do Qt executei o arquivo vsvars32.bat da minha instalação do MS Visual Studio 8 para adicionar as variáveis de ambiente do VS.
De acordo com o tutorial, devo executar:
> qmake -project "CONFIG += qtestlib"
> qmake
> nmake
Quando eu faço isso, a saída de nmake
é:
C:/Apps/Qt/2009.03/qt/binmoc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_TESTLIB_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"....AppsQt2009.03qtincludeQtCore" -I ".... apps qt 2009.03 qt incluir qtgui" -i ".... apps qt 2009.03 qt incluir qttest" -i ".... apps Qt 2009.03 qt inclua "-i". " -I ".... APPS QT 2009.03 qt incluir 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_thtrous Qtcore "-i" .... apps qt 2009.03 qt incluir qtgui "-i" .... apps qt 2009.03 qt incluir qttest "-i" .... apps qt 2009.03 qt inclua "-i". " -I ".... apps qt 2009.03 qt incluir Activeqt" -i "Debug" -i ".... apps qt 2009.03 qt mkspecs win32 -g ++" -o Debury testqstring.o testqstring.cpp
testeqstring.cpp:63:27:testeqstring.moc:Não existe tal arquivo ou diretório
NMAKE:erro fatal U1077:'C:\Apps\Qt\2009.03\mingw\bin\g++.EXE' :Código de retorno '0x1' pare.
NMAKE:erro fatal U1077:'C:\PROGRA~1\MICROS~3\VC\BIN make.exe' :Código de retorno '0x2' pare.
Então, posso ver que moc.exe está sendo chamado para gerar debug/testqstring.moc, mas esse arquivo nunca é gerado.
Obrigado por toda e qualquer orientação que você possa fornecer.
Solução
Parece que você está tentando usar nmake
para fazer uma compilação com MinGW. nmake
é uma ferramenta MSVC.
Se você quiser fazer uma compilação com MinGW você deve usar mingw32-make
.Se você quiser fazer uma compilação com MSVC você deve usar um Qt construído com MSVC (o que significa que você mesmo deve compilá-lo ou ter uma licença comercial).
Outras dicas
Eu tive o problema de que o moc.exe não gerou nenhum arquivo moc com o nmake.O motivo foi um caminho moc.exe errado dentro do Makefile.Debug.
Algo como:
C:/Qt/2009.03/qt/bin\moc.exe
Eu mudo para:
C:\Qt\2009.03\qt\bin\moc.exe
e agora funciona.;)
Infelizmente, o qmake irá gerar os makefiles toda vez que você executá-lo no menu ou reconstruir/limpar a solução/projeto.Acho que é um bug da configuração do qmake.
Para corrigi-lo permanentemente você deve encontrar o arquivo C:\MyQtDir\mkspecs\win32-msvc2008\qmake.conf.Para outras configurações você deve alterar win32-msvc2008.
Para mim estava em C:\Qt\2009.03\qt\mkspecs\win32-msvc2008\qmake.conf
Procure a frase "QMAKE_MOC".Você encontrará algumas linhas como esta:
QMAKE_MOC = $$[QT_INSTALL_BINS]\moc.exe
QMAKE_UIC = $$[QT_INSTALL_BINS]\uic.exe
QMAKE_IDC = $$[QT_INSTALL_BINS]\idc.exe
QT_INSTALL_BINS é um caminho que parece estar errado.Os separadores de diretório ainda são '/', mas deveriam ser '\'.No momento não sei exatamente onde devo alterar o QT_INSTALL_BINS.Mas o caminho qt não mudará para mim, então substituí a macro por nomes de caminho definidos:
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
Agora não há mais problemas com o moc.As reconstruções também funcionarão bem.
Espero que isto ajude ;)
Você já tentou usar o compilador/ferramentas incluídas no Qt em/mingw/bin?(No meu sistema, o Qt está instalado em C:\Qt\2009.03.) Da última vez que verifiquei, a distribuição não comercial do Qt não funcionará com o Visual Studio.Eu apenas tentei isso no prompt de comando do Qt e funcionou.
qmake -project "CONFIG += qtestlib"
qmake
mingw32-make
Espero que isto ajude.
Tem certeza de que o moc não foi gerado?Ele fica no diretório Debug, então você precisará #include "Debug/teststring.moc" ou #include com uma opção adicional do compilador -IDebug.
No caso de ainda compilar com VC nmake, há uma solução alternativa para esse bug aqui:http://bugreports.qt-project.org/browse/QTBUG-6470