2010-01-05 13 views
8

Me di cuenta de que mi pregunta anterior estaba un poco confundida acerca de las reglas y dependencias. El siguiente archivo .pro genera un archivo MAKE que funciona correctamente SI los archivos fuente en el directorio 'generado' existen en el momento qmake se ejecuta.qmake reglas para el código generado

idl.target = generated/qmtest.h 
idl.commands = code_generator 
idl.config = no_link 
idl.depends = $$SOURCES $$HEADERS $$FORMS 

TEMPLATE  = app 
INCLUDEPATH += generated 
SOURCES  += generated/*.cpp 
PRE_TARGETDEPS += generated/qmtest.h 
QMAKE_EXTRA_UNIX_TARGETS += idl 

Pero cuando se ejecuta qmake, su único generando un makefile, y PRE_TARGETDEPS & QMAKE_EXTRA_UNIX_TARGETS no me ayudan. ¿Cómo puedo obtener qmake para generar un archivo MAKE que agregará los contenidos generados/a FUENTES?

Respuesta

5

Es posible que deba hacer esto en dos pasos.

En el archivo de qmake, agregue la siguiente línea:

include(generated/generated.pri) 

Luego, al final de su script code_generator, añadir las fuentes en el archivo generated.pri (usando fiesta para el ejemplo, pero la idea es la misma para casi todos los idiomas):

rm generated/generated.pri 
for file in $(ls generated/*.cpp); do 
    echo "SOURCES += ${file}" >> generated/generated.pri 
done 

la primera vez que ejecute el archivo qmake, generada/generated.pri estará probablemente vacío. Cuando ejecute make, poblará el archivo generated.pri. La segunda vez, se volverá a crear el archivo make (como un archivo fuente .pri modificado), luego se compilará de nuevo. Es posible que puedas jugar con otros comandos que harían la segunda etapa para ti.

+0

Gracias - Terminé obligando al generador a ejecutarse durante qmake usando el sistema ($$ idl.commands). El archivo MAKE que genera es correcto y desde que agregué la salida al objetivo realmente no duele nada. – swarfrat

4

Tuve el mismo problema ahora, pero para un uso más simple de un solo archivo generado. Por eso, he encontrado una manera mucho más sencilla de lograr esto mediante el uso de fuentes de GENERATED_SOURCES lugar:

 
dummyfile.target = dummy.cpp 
dummyfile.commands = touch $$dummyfile.target 
QMAKE_EXTRA_TARGETS += dummyfile 
GENERATED_SOURCES += $$dummyfile.target 

Probablemente se podría empujar a que en un bucle qmake y generar los objetivos adecuados para múltiples archivos también.

+0

+ PRE_TARGET_DEPENDS + = dummyfile – arved

0

He encontrado una solución que creo que es robusta y general, que se basa en qmake generando un archivo Make de GNU.

Digamos que tenemos todos los extras SOURCES y HEADERS asignaciones en un archivo llamado Makefile.pri, que se genera mediante la ejecución del script generate_Makefile.pri.sh que también genera las fuentes y/o cabeceras mencionadas en Makefile.pri.

Queremos que este archivo sea generado de forma automática y confiable por el propio sistema de compilación, para que se incluya en el archivo .pro, de modo que qmake pueda tener en cuenta su contenido y generar el archivo Makefile con las dependencias apropiadas.

Esto es entonces lo que tenemos que poner en nuestro archivo .pro.

Makefile_pri.target = Makefile.pri 
Makefile_pri.commands = generate_Makefile.pri.sh 
Makefile_pri.depends = FORCE 

Makefile.target = $$MAKEFILE 
Makefile.depends = Makefile_pri 

include($$Makefile_pri.target) 

QMAKE_EXTRA_TARGETS = Makefile Makefile_pri 

esta manera:

  1. si no hay Makefile.pri, entonces se crea;
  2. Si Makefile.pri se crea o se actualiza, a continuación, qmake se ejecuta de nuevo y tiene en cuenta su contenido, la regeneración de los Makefile

Como se ha dicho, este qué dependen de qmake generar un Makefile de GNU, pero el mismo enfoque que cree que podría adaptarse para funcionar también con otros sistemas de compilación de destino.

Cuestiones relacionadas