Qt4 en Visual Studio 2008: ¿se excluyen los archivos moc-ed de la compilación?

StackOverflow https://stackoverflow.com/questions/1200268

  •  05-07-2019
  •  | 
  •  

Pregunta

Recientemente instalé VS Addin desde Qt Software e importé mi proyecto .pro a VS2008. En general, todo funciona bien, con una excepción pequeña pero molesta.

Supongamos que tengo un archivo.cpp con una clase que declara que es un Q_OBJECT. Entonces, como tal, el archivo es MOC-ed y se genera moc_file.cpp, y está disponible en Solución en " Archivos generados " ;. Hasta ahora todo bien.

Lo curioso es que, cuando cambio algo en file.cpp (agregue una línea, por ejemplo) y guardo el archivo usando Ctrl + S, moc_file.cpp queda excluido de la compilación (puede ver un signo de no entrada) en el icono). Y golpeo muchos de los errores típicos del enlazador cuando presiono F7 para construir una solución. Para solucionar la situación, tengo que ir a las propiedades de moc_file.cpp y cambiar "Excluir de la compilación". de " Sí " a " No " ;. Entonces todo funciona bien.

¿Alguien más está experimentando lo mismo? ¿Estoy haciendo algo mal?

¿Fue útil?

Solución

Problema resuelto. Descubrí que en mi archivo .pro hecho a mano que describe mi proyecto, tenía MOC_DIR especificado como:

  

MOC_DIR = .moc

Después de importar al directorio de Visual Studio para " Archivos generados " fue el mismo tanto para la versión y la depuración. Entonces, cuando mi configuración activa era Depurar, por ejemplo, cuando guardé un archivo, se excluyó de la compilación porque era sensible para el archivo relacionado con la versión, tal como lo sugirieron RPG y Andrew. Después de cambiar el directorio a .moc \ $ (nombre de la configuración), el problema ya no se ve (y veo 2 versiones de cada archivo generado en mi solución, una para cada configuración).

¡Gracias por su ayuda a todos!

Otros consejos

En realidad, he encontrado la solución para esa "característica". Debe agregar AMBOS archivos de GeneratedFiles \ Debug y GeneratedFiles \ Debug (o de otros directorios de configuraciones). Qt excluirá de la compilación todo lo que no pertenece al tipo de compilación seleccionado actualmente.

Sí, uso el último complemento de VS y mi proyecto se ve correctamente como un proyecto Qt.

¿configuró su configuración correctamente?

Abra la ventana " Ajustes de configuración de depuración " Configure los siguientes elementos como se indica a continuación:

  • " Construir línea de comando " qmake -project & amp; qmake & amp; hacer la depuración
  • " Comandos de limpieza " hacer una depuración limpia
  • " Reconstruir línea de comando " qmake & amp; hacer la depuración

Repita lo mismo con la configuración de lanzamiento

He visto el comportamiento excluido de compilación en VS2008 (VS 2003 también), pero el proyecto se compila correctamente. Cuando cambies un archivo moc'able, Qt tendrá que volver a crear el archivo moc'ed porque está desactualizado.

Sospecho que el algoritmo de Qt es algo así como:

  • detectar que el archivo fue cambiado
  • establecer el archivo moc antiguo como excluido de la compilación
  • agregue un nuevo archivo al proyecto con el mismo nombre e inclúyalo en la compilación

Al mirar mi proyecto VS 2003, puedo ver que algunos archivos moc_ * se incluyen dos veces en el proyecto, una versión se establece como excluida de la compilación y la otra no.

Volver a crear el archivo .vsproj usando qmake podría solucionar el problema.

Para cada archivo QObject que tiene, el complemento QT crea un archivo moc_ para cada configuración de compilación (generalmente solo depuración y lanzamiento). Cuando cambia la configuración actual, puede ver que los signos de No entrada van de un archivo a otro.
Los archivos moc_ no deben cambiar cuando cambia el archivo .cpp. solo cuando cambias los archivos .h. Todo esto me lleva a pensar que algo mal sucedió con tu configuración y realmente la mejor manera de solucionarlo es recrearlo con qmake usando algo como esto:

qmake -spec win32-msvc2008
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top