Pregunta

Me di cuenta de mi pregunta anterior era un poco confundido acerca de las reglas y dependencias. El archivo .pro siguiente genera un makefile que funciona correctamente si existen los archivos de origen en el directorio 'generado' en las carreras QMake tiempo.

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

Sin embargo, cuando se ejecuta qmake, su única generar un makefile, y PRE_TARGETDEPS y QMAKE_EXTRA_UNIX_TARGETS no me ayudas. ¿Cómo puedo obtener qmake para generar un makefile que añadir el contenido de generados / a las fuentes?

¿Fue útil?

Solución

Es posible que tenga que hacer esto en dos pasadas.

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 se ejecuta hacer, rellenará el archivo generated.pri. La segunda vez, volverá a crear el archivo de maquillaje (como un archivo fuente .pri cambiado), a continuación, compilar de nuevo. Usted puede ser capaz de ver alrededor de otros comandos que hacer la segunda etapa para usted.

Otros consejos

Yo tenía el mismo problema hace un momento, pero para un caso de 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.

Yo he llegado con una solución que yo creo que es robusta y general, que se basa en qmake generar un Makefile de GNU.

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

Queremos que este archivo de forma automática y fiable generada por el propio sistema de construcción, por lo que se incluirá en el archivo .pro, de manera que qmake puede tener en cuenta su contenido y generar el Makefile con las dependencias apropiadas.

Esto es entonces lo que tenemos que poner en nuestro fichero .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

De esta manera:

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

Como se ha dicho, este hace depende de qmake generar un Makefile de GNU, pero el mismo enfoque que creo podría ser adaptado para trabajar también con otros sistemas de construcción de destino.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top