2014-06-07 9 views
6

Sto avendo questo CMakeLists.txt nella directory con i file di traduzione (*.ts):internazionalizzazione Qt e CMake: come aggiornare ts * e non perdono li

SET(TRANSLATIONS 
    lang_de.ts 
    lang_en.ts 
) 

FIND_PACKAGE(Qt5LinguistTools) 
QT5_ADD_TRANSLATION(QM_FILES ${TRANSLATIONS}) 
SET(QM_FILES ${QM_FILES} PARENT_SCOPE) 
ADD_CUSTOM_TARGET (translations ALL DEPENDS ${QM_FILES}) 

costruisce *.qm file da specificato *.ts.

Ma voglio migliorare questo e ottenere due target personalizzati, che non verranno creati automaticamente. Uno per aggiungere nuove stringhe da fonti nei file ts e uno per l'aggiornamento ts. L'ultimo dovrebbe aggiornare ts da fonti e rimuovere le stringhe obsolete da ts.

ho cercato di aggiungere questo dopo le linee di cui sopra:

ADD_CUSTOM_TARGET (
    ts_append 
    COMMAND QT5_CREATE_TRANSLATION(QM_FILES ${CMAKE_SOURCE_DIR}/src/app ${TRANSLATIONS} OPTIONS -I ${CMAKE_SOURCE_DIR}/src) 
) 

ADD_CUSTOM_TARGET (
    ts_refresh 
    COMMAND QT5_CREATE_TRANSLATION(QM_FILES ${CMAKE_SOURCE_DIR}/src/app ${TRANSLATIONS} OPTIONS -no-obsolete -I ${CMAKE_SOURCE_DIR}/src) 
) 

ma sembra non posso usare QT5_CREATE_TRANSLATION macro all'interno di destinazione personalizzato, non è vero?

Forse sono sulla strada sbagliata, come è possibile risolvere questo problema: un facile aggiornamento del ts e non perderle dopo make clean?

risposta

1

per risolvere il problema make clean, aggiungere una sottodirectory (ADD_SUBDIRECTORY(translations)) e aggiungere SET_DIRECTORY_PROPERTIES(PROPERTIES CLEAN_NO_CUSTOM 1) alla contenuta CMakeLists.txt. Vedere here per un esempio.

Per la seconda parte della domanda ci sono due modi possibili per farlo. Utilizzare FILE(WRITE <filename> "QT5_CREATE_TRANSLATION(QM_FILES ${SOURCE_DIR}/src/app ${TRANSLATIONS} OPTIONS -I ${SOURCE_DIR}/src)") e quindi utilizzare COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} -DTRANSLATIONS=${TRANSLATIONS} <filename> in add_custom_target. Dubito che ci sia un buon modo per recuperare il contenuto di QM_FILES. La seconda opzione prevede la creazione di due sottodirectory aggiuntive, ciascuna con una chiamata QT5_CREATE_TRANSLATIONS e una chiamata ADD_CUSTOM_TARGET.

+0

SET_DIRECTORY_PROPERTIES (PROPERTIES CLEAN_NO_CUSTOM TRUE) con una sottodirectory non funziona per me (utilizzando CMake 3.2.1): il link che hai postato non è disponibile, quindi forse puoi elaborare come hai fatto questo lavoro. Se si specifica SET_DIRECTORY_PROPERTIES (PROPERTIES CLEAN_NO_CUSTOM TRUE) nel file di livello superiore funziona comunque. Voglio avere tutti gli altri file generati cancellati, quindi questa è una soluzione per me. –

+0

Il file è stato spostato, l'ho messo in un gist invece e aggiornato il link. – Jan

+0

Grazie per la risposta @ Jan! Ho dovuto ritardare il lavoro su questo progetto e non ho un ambiente di sviluppo configurato per verificare il tuo suggerimento adesso. Segnalo come accettato non appena posso provare questo – Storm