Digamos que tengo una aplicación Qt donde tengo dos clases con el mismo nombre en dos espacios de nombres diferentes:¿Por qué qmake coloca todos los archivos de objetos (.o) en un directorio?
namespace namespace1
{
class SomeClass;
}
namespace namespace2
{
class SomeClass;
}
y tengo una estructura de directorios del proyecto de acuerdo con ella:
-->src/
-->namespace1/
-->someclass.cpp
-->namespace2/
-->someclass.cpp
Cuando compile la aplicación con qmake, coloca todos los archivos de objetos (.o) en un directorio, por lo que crea alguna clase archivo primero y luego la reescribe con la segunda alguna clase.o - que es una colisión de nombre por lo que es malo.
¿Por qué qmake no tienen en cuenta la estructura de directorios de los archivos de origen y por qué no crear algo así como namespace1_someclass.o y namespace2_someclass.o?
Sí, puedo poner mis clases a un directorio y las nombran namespace1_someclass.cpp y namespace2_someclass.cpp y no habrá ningún conflictos de nombres, pero esto hace que las menores molestias mientras se mira en los archivos de origen en el proyecto explorador en Qt Creator porque cuando hay muchos archivos fuente en el proyecto, es mucho menos legible que si hubiera la estructura de directorios que puedo expandir o colapsar.
Uno más extrema es tener la estructura de directorios de la siguiente manera:
-->src/
-->namespace1/
-->namespace1_someclass.cpp
-->namespace2/
-->namespace2_someclass.cpp
que resuelve conflictos con los nombres pero redundante duplica los nombres de espacio de nombres - y, por tanto, de nuevo menos legible.
¿Por qué qmake no tiene al menos una opción para colocar los archivos objeto en la estructura del directorio de acuerdo con los archivos fuente? ¿Los creadores de Qt no ven que esta es una característica importante?
Y una cosa más - que podría recomendarme a utilizar cmake herramienta en lugar de qmake pero veo el uso de cmake mucho mucho mucho más difícil que qmake y qmake hace su trabajo excelente para mí hasta ahora - excepto la ubicación de archivos de objeto.
sólo puedo adivinar lo que los autores de qmake estaban pensando; mi suposición es que simplemente no anticiparon que alguien tuviera múltiples archivos .cpp con el mismo nombre en el mismo proyecto. FWIW están trabajando en un reemplazo para qmake llamado qbs ... quizás hace un mejor trabajo (no lo he probado yo mismo, así que no sé): http://labs.qt.nokia.com/2012/ 02/15/introduction-qbs/ –