2009-08-29 14 views
5

Sto cercando di costruire l'esempioqtestlib/tutorial1, ma il testqstring.moc non viene generato il file quando corro nmake (sto correndo Qt 4.5.2 su Windows XP SP3).
Ho copiato testqstring.cpp dalla directory tutorial per la mia directory di costruzione (C: \ sandbox \ testqstring) e dal prompt dei comandi Qt imbattuto file di vsvars32.bat dal mio MS Visual Studio 8 di installazione per aggiungere l'ambiente VS variabili.
Qt non moc.exe generare file * .moc

Secondo il tutorial, dovrei correre:

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

Quando lo faccio, l'uscita dal 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" .... \ App \ 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: No such file or directory
NMAKE: errore irreversibile U1077: 'C: \ Apps \ Qt \ 2009.03 \ mingw \ bin \ g ++. EXE ': codice di ritorno' 0x1 ' Stop.
NMAKE: errore irreversibile U1077: 'C: \ PROGRA ~ 1 \ MICROS ~ 3 \ VC \ BIN \ nmake.exe': codice di ritorno '0x2' Stop.

Quindi, posso vedere che moc.exe viene chiamato per generare debug/testqstring.moc, ma quel file non viene mai generato.

Grazie per tutte le indicazioni che è possibile fornire.

+0

Puoi includere il file .pro generato quando si esegue il primo comando? – Ropez

+0

Ho avuto lo stesso problema. Ma l'ho risolto rimuovendo il file qt.conf dalla directory /bin. –

risposta

4

Sembra che tu stia cercando di utilizzare nmake per creare una build con MinGW. nmake è uno strumento MSVC.

Se si desidera eseguire una build con MinGW, è necessario utilizzare mingw32-make.Se vuoi creare una build con MSVC devi usare una Qt costruita con MSVC (il che significa che devi costruirla da te o avere una licenza commerciale).

+0

Grazie. Sapevo che sarebbe stato qualcosa di semplice. mingw32-make funziona bene. –

0

Sei sicuro che il moc non sia stato generato? Vive nella directory Debug, quindi dovrai o includere #include "Debug/teststring.moc" o # include un'ulteriore opzione del compilatore -IDeb.

+0

Se si guarda la riga di compilazione si può vedere che include già -I "debug". L'utente non ha bisogno di farlo esplicitamente nel file .pro. – rohanpm

1

Hai provato a utilizzare il compilatore/gli strumenti inclusi con Qt in/mingw/bin? (Nel mio sistema, Qt è installato in C: \ Qt \ 2009.03.) L'ultima volta che ho controllato, la distribuzione non commerciale di Qt non funzionerà con Visual Studio. Ho appena provato questo dal prompt dei comandi Qt e ha funzionato.

qmake -project "CONFIG += qtestlib" 

qmake 

mingw32-make 

Spero che questo aiuti.

+0

Grazie, mingw32-make ha fatto il trucco. Pensavo che avrebbe funzionato solo con nmake. Il tutorial ha menzionato solo make e nmake. Dato che ho MSVC, ho pensato che nmake fosse lo strumento giusto. Ovviamente, non lo era. –

2

Ho avuto il problema che il moc.exe non ha generato alcun file moc con nmake. Il motivo era un errato percorso moc.exe all'interno del Makefile.Debug.

Qualcosa di simile:

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

lo cambio a:

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

e ora funziona. ;)

Purtroppo, qmake genererà i makefile ogni volta che viene eseguito dal menu o ricostruire/pulire la soluzione/progetto. Penso che sia un bug della configurazione di qmake.

Per risolvere il problema in modo permanente, è necessario trovare il file C: \ MyQtDir \ mkspecs \ win32-msvc2008 \ qmake.conf. Per altre configurazioni devi modificare win32-msvc2008.

Per me è stato in C: \ Qt \ 2009.03 \ qt \ mkspecs \ win32-msvc2008 \ qmake.conf

ricerca del "QMAKE_MOC" frase. Troverete alcune righe come questa:

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

QT_INSTALL_BINS è un percorso che sembra essere sbagliato. I separatori di directory sono ancora '/', ma dovrebbero essere '\'. Al momento non so esattamente dove devo modificare QT_INSTALL_BINS. Ma il percorso qt non cambierà per me, così ho sostituito la macro da percorsi difficili definito:

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 

Ora non ci sono problemi con la moc più. Anche le ricostruzioni funzioneranno bene.

Spero che questo aiuti;)

+1

È possibile aggiornare il percorso QT_INSTALL_BINS eseguendo qmake. qmake -set "QT_INSTALL_BINS" "C: \ Qt \ 2009.03 \ qt \ bin" Ulteriori informazioni qui: http://doc.trolltech.com/4.5/qmake-environment-reference.html –