Domanda

Di recente ho installato VS Addin da Qt Software e ho importato il mio progetto .pro su VS2008. In generale, tutto funziona bene, con una piccola ma fastidiosa eccezione.

Supponiamo di avere un file.cpp con una classe che dichiara che è un Q_OBJECT. Quindi, in quanto tale, il file è MOC-ed e viene generato moc_file.cpp, ed è disponibile nella soluzione sotto "File generati". Fin qui tutto bene.

La cosa divertente è che quando cambio qualcosa in file.cpp (aggiungi una riga, per esempio), e salvo il file usando Ctrl + S, il moc_file.cpp viene escluso dalla build (puoi vedere un segno di nessuna voce sull'icona). E ho riscontrato molti errori tipici del linker quando premo F7 per creare una soluzione. Per risolvere la situazione, devo andare alle proprietà di moc_file.cpp e cambiare " Exclude dalla build " da " Sì " a "No". Quindi tutto funziona bene.

Qualcun altro sta vivendo lo stesso? Sto facendo qualcosa di sbagliato?

È stato utile?

Soluzione

Problema risolto. Ho scoperto che nel mio file .pro fatto a mano che descrive il mio progetto, avevo MOC_DIR specificato come:

  

MOC_DIR = .moc

Dopo l'importazione nella directory di Visual Studio per " File generati " era lo stesso per Release e Debug. Quindi, quando la mia configurazione attiva era Debug, ad esempio, quando ho salvato un file, questo è stato escluso dalla build perché era ragionevole per il file relativo alla versione, proprio come suggerivano rpg e Andrew. Dopo aver modificato la directory in .moc \ $ (ConfigurationName) il problema non viene più visualizzato (e vedo 2 versioni di ciascun file generato nella mia soluzione, una per ogni configurazione).

Grazie per il vostro aiuto a tutti!

Altri suggerimenti

In realtà, ho trovato la soluzione per quella "funzione". Devi aggiungere ENTRAMBI i file da GeneratedFiles \ Debug e GeneratedFiles \ Debug (o da altre directory di configurazione). Qt esclude dalla compilazione tutto ciò che non appartiene al tipo di build attualmente selezionato.

Sì, utilizzo l'ultimo VS Addin e il mio progetto è correttamente visto come un progetto Qt.

hai impostato correttamente la tua configurazione?

Apri la finestra " Impostazioni di configurazione debug " Impostare i seguenti elementi come indicato di seguito:

  • " Crea riga di comando " qmake -project & amp; qmake & amp; nmake debug
  • " Comandi puliti " nmake debug-clean
  • " Ricostruisci riga di comando " qmake & amp; nmake debug

Ripeti lo stesso con la configurazione di rilascio

Ho visto gli esclusi dal comportamento di compilazione in VS2008 (anche VS 2003), ma il progetto si sviluppa correttamente. Quando si modifica un file moc'able, Qt dovrà ricreare il file moc'ed perché non è aggiornato.

Sospetto che l'algoritmo di Qt sia simile a:

  • rileva che il file è stato modificato
  • imposta il vecchio file moc come escluso dalla build
  • aggiungi un nuovo file al progetto con lo stesso nome e includilo nella build

Guardando il mio progetto VS 2003, vedo che alcuni file moc_ * sono inclusi due volte nel progetto, una versione è impostata come esclusa dalla build e l'altra no.

Ricreare il file .vsproj usando qmake potrebbe risolvere il problema.

Per ogni file QObject che hai, il plugin QT crea un file moc_ per ogni configurazione di build (di solito solo Debug e Release). Quando si modifica la configurazione corrente, è possibile vedere i segni No entry che passano da un file all'altro.
I file moc_ non dovrebbero cambiare quando si modifica il file .cpp. solo quando cambi i file .h .. Tutto ciò mi porta a pensare che qualcosa di sbagliato sia successo con la tua configurazione e davvero il modo migliore per risolverlo è ricrearlo con qmake usando qualcosa del genere:

qmake -spec win32-msvc2008
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top