para - qt tutorial español
Cómo establecer el orden de compilación en el proyecto Qt subdir (2)
Tengo un proyecto con 5-6 bibliotecas y un ejecutable. El ejecutable depende de las bibliotecas, y algunas bibliotecas dependen de otras bibliotecas. ¿Cómo puedo especificar un orden de compilación para que las dependencias se construyan antes de que se necesiten?
De acuerdo. Encontré la solución. Simplemente agregue ordenado a CONFIG y recite los subdirectores en el orden correcto
CONFIG += ordered
SUBDIRS += Utility GraphicModule PackingLib Core GameProto
Para mí esto funciona bien
Aunque esta pregunta ha sido respondida y aceptada hace mucho tiempo, siento la necesidad de agregar otra respuesta; Honestamente creo que hay una mejor respuesta.
Considero CONFIG += ordered
dañino y un mal hábito. Probablemente es algo que fue un poco prematuramente introducido por los desarrolladores de qmake. Y hay fuertes oponentes a su uso. Los inconvenientes son estos:
- no define las dependencias, simplemente nombra una orden de compilación
- martilla tiempos de construcción multinúcleo
- evita que los desarrolladores de Qt implementen características significativas
Por lo tanto, sugiero cambiar su archivo de proyecto de la siguiente manera:
TEMPLATE = subdirs
SUBDIRS += Utility GraphicModule PackingLib Core GameProto
GameProto.depends = Core
Core.depends = PackingLib
PackingLib.depends = GraphicModule
GraphicModule.depends = Utility
De esta manera, las dependencias están claramente definidas. También puede pensar en otras jerarquías de dependencia más complicadas que son posibles de esta manera y absolutamente imposibles con el orden de compilación.
Actualización: (21 de junio de 2017)
Desafortunadamente, qmake
no es la mejor herramienta cuando se trata de proyectos más grandes con jerarquías profundas de subproyectos. Los problemas que se ven con proyectos más grandes son estos:
- no es posible definir dependencias para subproyectos más arriba en la jerarquía
-
Run qmake
lleva mucho tiempo en ejecutarse - tiempo de compilación largo porque las dependencias no se manejan correctamente y se ejecutaron demasiados pasos de compilación innecesarios
- A veces,
qmake
no puede calcular correctamente las dependencias de subproyectos lo que hace necesario compilar los subproyectos por separado
Existen principalmente dos formas de abordar estos problemas:
- Reescribe tu proyecto a una jerarquía plana. Todos los ejecutables, bibliotecas estáticas y dinámicas deben estar en el nivel superior. Use dos o más niveles solo para subproyectos en los que no puede evitarlo. (por ejemplo, una biblioteca dinámica que se compone de bibliotecas estáticas) Esto dará como resultado tiempos de ejecución de
qmake
más cortos y tiempos de compilación más cortos. Sin embargo, incluso este enfoque puede fallar a veces. - Cambie a una herramienta de marca diferente, como
cmake
. Seriamente.Cmake
es un producto maduro y el soporte de Qt Creator es comparable aqmake
.
Comentario:
Debido a los conocidos problemas con qmake
, la compañía Qt ya decidió introducir una nueva herramienta QBS
. Sin embargo, el uso de esta herramienta no es tan simple como puede parecer en la primera impresión. No hay una transición fácil de qmake
a QBS
, especialmente para proyectos más complejos. La sintaxis similar al Javascript del lenguaje QBS
no es fácil de comprender y la documentación escasa.
Hay en mi humilde opinión solo dos otras herramientas disponibles que son del calibre para reemplazar qmake
: