Domanda

ho capito la mia precedente domanda era un po 'confuso circa le regole e le dipendenze. Il seguente file .pro genera un makefile che funziona correttamente se esistono i file di origine nella directory 'generato', presso le piste QMake tempo.

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

Ma quando qmake corre, il suo solo generare un makefile, e PRE_TARGETDEPS & QMAKE_EXTRA_UNIX_TARGETS non mi aiuti. Come posso ottenere qmake per generare un makefile che aggiungerà i contenuti di generata / a fonti?

È stato utile?

Soluzione

Potrebbe essere necessario farlo in due passaggi.

Nel file qmake, aggiungere la seguente riga:

include( generated/generated.pri )

Poi, alla fine dello script code_generator, aggiungere le fonti al file generated.pri (usando bash per l'esempio, ma l'idea è la stessa per quasi tutte le lingue):

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

La prima volta che si esegue il file qmake, generato / generated.pri sarà presumibile vuoto. Quando si esegue fare, si popolerà il file generated.pri. La seconda volta, verrà ricreare il file make (come modificato un file .pri di origine), quindi compilare di nuovo. Potreste essere in grado di smanettare con altri comandi che farebbero la seconda fase per voi.

Altri suggerimenti

Ho avuto lo stesso problema in questo momento, ma per un caso d'uso più semplice di un solo file generato. Per questo, ho trovato un modo molto più semplice per raggiungere questo obiettivo utilizzando GENERATED_SOURCES invece di FONTI:

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

Probabilmente si poteva spingere che in un ciclo qmake e generare gli obiettivi corrette per più file pure.

I è venuta in mente una soluzione che credo di essere robusto e generale, che si basa su qmake generazione di un GNU Makefile.

dire che abbiamo ottenuto tutte le assegnazioni SOURCES e HEADERS extra in un file chiamato Makefile.pri, che viene generato eseguendo il generate_Makefile.pri.sh script che genera anche le fonti e / o le intestazioni di cui Makefile.pri.

Vogliamo che questo file automaticamente e in modo affidabile generata dal sistema di compilazione stesso, in modo da includere nel file .pro, in modo che qmake può prendere in considerazione il suo contenuto e generare il Makefile con le dipendenze corrette.

Questa è allora quello che dobbiamo mettere nel nostro file .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

In questo modo:

  1. se non c'è Makefile.pri, allora viene creato;
  2. Se Makefile.pri viene creato o aggiornato, quindi qmake corre ancora e tiene conto del suo contenuto, la rigenerazione del Makefile

Come detto, questo non dipendono qmake generare un GNU Makefile, ma lo stesso approccio Credo potrebbe essere adattato per funzionare anche con altri sistemi di generazione di destinazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top