2009-07-29 7 views
6

Recientemente he instalado VS Addin de Qt Software e importé mi proyecto .pro a VS2008. En general, todo funciona bien, con una excepción pequeña pero molesta.Qt4 en Visual Studio 2008 - ¿los archivos moc-ed se excluyen de la compilación?

Supongamos que tengo un archivo.cpp con una clase que declara que es un Q_OBJECT. Por lo tanto, como tal, el archivo es MOC-ed y se genera moc_file.cpp, y está disponible en Solución en "Archivos generados". Hasta aquí 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, el moc_file.cpp queda excluido de la compilación (puede ver una entrada sin firmar en el icono). Y toco muchos errores de enlazador típicos cuando presiono F7 para construir una solución. Para solucionar la situación, necesito ir a las propiedades de moc_file.cpp y cambiar "Excluir de compilación" de "Sí" a "No". Entonces todo funciona bien.

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

+0

¿Tiene la última VS Addin? ¿Sus proyectos son vistos como "proyectos Qt" por VS? – rpg

Respuesta

7

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

MOC_DIR = .moc

Después de importar al directorio de Visual Studio para "Los archivos generados" era lo mismo para Release y Debug. Entonces, cuando mi configuración activa era Depurar, por ejemplo, cuando guardé un archivo, se excluyó de la compilación porque era sensato para el archivo relacionado con la Versión, tal como sugirieron RPG y Andrew. Después de cambiar el directorio a .moc \ $ (ConfigurationName), 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!

+0

Me encontré con el mismo problema al importar un .pro en VS 2008 y, de hecho, a algunas de las carpetas "generadas" les faltaba la parte $ (Nombre de configuración). P.S: Debería aceptar su propia respuesta para que esta pregunta no aparezca en la sección sin respuesta. ;-) – rpg

+0

Aumentó el conteo de votos ya que me encontré con el mismo problema y esto pareció acertar en la cabeza. – OverTheEdge

0

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

0

¿configuró correctamente su configuración?

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

  • "línea de comandos" Construir qmake qmake -Proyecto & & NMAKE depuración
  • comandos "limpias" nmake debug- limpia
  • "Reconstruir la línea de comandos" qmake depuración & nmake

Repita lo mismo con la configuración de lanzamiento

0

He visto el comportamiento de compilación excluido en VS2008 (VS 2003 también), pero el proyecto se compila correctamente. Cuando cambie 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 antigua como excluidos de la acumulación
  • añadir un nuevo archivo al proyecto con el mismo nombre e incluirlo 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 ot ella no es.

0

Recrear el archivo .vsproj usando qmake podría solucionar el problema.

Para cada archivo QObject que tenga, el complemento QT crea un archivo moc_ para cada configuración de compilación (normalmente solo Depuración y versión). Cuando cambia la configuración actual, puede ver que las señales de entrada no van de un archivo a otro.
Los archivos moc_ no deberían cambiar cuando cambie el archivo .cpp. solo cuando cambias los archivos .h ...Todo esto me lleva a lo que sucedió algo mal con su configuración y realmente la mejor manera de solucionarlo es recrear con qmake usar algo como esto:

qmake -spec win32-msvc2008 
1

En realidad, he encontrado la solución para que " 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.

Cuestiones relacionadas