Compilando QT con Visual Studio (esta sí que sí)

Dicen que a la tercera va la vencida, y esta vez así ha sido. Ahora que me voy a meter más en serio con QT estoy dándole algo más de caña al asunto, y lo primero de todo era aprovechar, de verdad, Visual Studio y su magnífico compilador, que es mejor en al menos un orden de magnitud al de GNU y seguro que en varios al de C++ Builder (que por cierto no creo que sea capaz de compilar QT ni a trompicones).

Como sabréis he escrito al menos tres entradas sobre cómo compilar QT con Visual C++, y en las tres (aquí, aquí y aquí) siempre he hablado de lo mismo: errores en el proceso de compilación. ¡Pues bien, las manchas se van a acabar!

O en otras palabras: ya sé qué está pasando. La verdad es que es una tontada mayúscula, pero hasta que te das cuenta de ello…

Todo está relacionado con el meta-compilador de QT, MOC. La tarea de éste es coger nuestros ficheros cabecera que tengan algún signal o slot y generar un nuevo fichero post-procesado al que se le ha añadido el código necesario para que todo funcione, y entonces compilarlo todo.

La biblioteca de QT, se ve que para acelerar un poco los procesos, incluye una serie de ficheros de caché llamados mocinclude.tmp. Gracias a estos ficheros a veces no es necesario un proceso completo de compilación.

Hasta ahora todo bien, pero dado que compilar con Visual C++ no es lo mismo que hacerlo con GCC, esos ficheros temporales no son intercambiables entre compiladores, y la distribución del código fuente se deja algunos sin borrar. Como esos ficheros dependen de GCC y nosotros estamos recompilando para VC++, el proceso de generación de código falla.

Por eso comenté en las entradas anteriores que había que borrar algunos ficheros para poder compilar el WebKit y que la parte de scripting no funcionaba. Todo ello era debido al mismo problema con esos ficheros de caché, pero no me había dado cuenta de ello.

Ahora sí, si ya has leído las entradas anteriores, compilar QT con VC++ es tan fácil si antes recorres el árbol de ficheros fuente borrando todos los mocinclude.tmp, lo que se puede hacer de forma muy fácil modificando el .BAT que en su momento expliqué en las otras entradas. El nuevo quedaría como:

cd %1qt
del mocinclude.tmp /s
configure -debug-and-release -shared -no-qt3support –opensource
nmake
cd ..
cd ..

Eso sí, tenemos que compilarlo con Visual Studio 2008SP1 o anterior porque con Visual Studio 2010 hay algún cambio en el compilador que rompe la compilación, y esta vez no es una cosa de ficheros, sino algo que se le ha añadido y que al nuevo compilador de C++ no le gusta. Supongo que Nokia no tarde mucho a actualizarlo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *