Ho alcuni file di dati di grandi dimensioni che devono essere copiati dalle cartelle di origine per creare cartelle durante la nostra build Qmake/QtCreator. Dato che sono grandi, voglio solo che la copia avvenga per i file nuovi/modificati. E mi piacerebbe davvero evitare di elencarli tutti nello specifico nel file di progetto. Ecco cosa ho provato:Come ottenere QMake per copiare file di dati di grandi dimensioni solo se aggiornati
Questo tentativo di copiare i file di dati non riesce perché la cartella DemoData è la destinazione. Pertanto la copia non viene eseguita se i file all'interno della cartella vengono aggiunti o modificati. Solo se la cartella non esiste.
DemoData.commands = $$COPY_CMD $${SRC_DATA_DIR}DemoData $${BLD_DATA_DIR}DemoData
DemoData.target += $${BLD_DATA_DIR}DemoData
PRE_TARGETDEPS += $${BLD_DATA_DIR}DemoData
QMAKE_EXTRA_TARGETS += DemoData
Questo approccio fallisce perché l'elemento DemoData.target non dovrebbe avere un elenco di più elementi. QMake inserisce l'elenco tra virgolette nel makefile generato in modo che diventi un obiettivo.
DemoData.commands = $$COPY_CMD $${SRC_DATA_DIR}DemoData $${BLD_DATA_DIR}DemoData
DEMO_DATA_FILES = $$files($${SRC_DATA_DIR}DemoData/*)
for(FILE, DEMO_DATA_FILES){
DemoData.target += $${BLD_DATA_DIR}DemoData\\$$basename(FILE)
PRE_TARGETDEPS += $${BLD_DATA_DIR}DemoData\\$$basename(FILE)
}
QMAKE_EXTRA_TARGETS += DemoData
Questo tentativo fallisce perché (AFAICT) QMake non supporta i nomi delle variabili contenute in altre variabili. Sembra essere più una sostituzione di un livello. Viene generato un makefile, ma gli obiettivi DemoDataX non hanno linee di comando. Tutti i tentativi di visualizzare il contenuto del campo "comandi" generano errori di sintassi.
DEMO_DATA_FILES = $$files($${SRC_DATA_DIR}DemoData/*)
DEMO_DATA_NAME = DemoData
for(FILE, DEMO_DATA_FILES){
$${DEMO_DATA_NAME}.target = $${FILE}
$${DEMO_DATA_NAME}.commands = $$COPY_CMD $${FILE} $${BLD_DATA_DIR}DemoData
PRE_TARGETDEPS += $${FILE}
QMAKE_EXTRA_TARGETS += $${DEMO_DATA_NAME}
DEMO_DATA_NAME = $${DEMO_DATA_NAME}X
}
Questo approccio funziona, ma con due difetti. Il minore è che deve essere eseguito un passaggio separato di "installazione". Il principale è che i file vengono sempre copiati incondizionatamente. Poiché i nostri file di dati sono grandi, questo è inaccettabile per il tempo.
DemoData.path = $${BLD_DATA_DIR}DemoData
DemoData.files = $${SRC_DATA_DIR}DemoData/*
INSTALLS += DemoData
C'è un modo per fare questo, o sto lasciato con una sorta di script esterno o generato manualmente Makefile/mantenuto?
Sembra una buona opzione. Non avrò la possibilità di provare per un po '. –