Qt国际化和CMake:如何更新* .ts并且不会丢失它们

时间:2014-06-07 09:30:52

标签: qt cmake qt5

我在目录中有CMakeLists.txt个翻译文件(*.ts):

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})

它从指定的*.qm构建*.ts个文件。

但我希望改进这一点并获得两个自定义目标,这些目标不会自动构建。 一个用于将源中的新字符串附加到ts个文件,另一个用于刷新ts。最后一个将从源更新ts并从ts中删除过时的字符串。

我尝试在上面的行之后添加:

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)
)

但似乎我无法在自定义目标中使用QT5_CREATE_TRANSLATION宏,不是吗?

也许我错误的方式,你会如何解决这个问题:ts轻松更新,make clean之后不要丢失它们?

1 个答案:

答案 0 :(得分:1)

要解决make clean问题,请添加子目录(ADD_SUBDIRECTORY(translations))并将SET_DIRECTORY_PROPERTIES(PROPERTIES CLEAN_NO_CUSTOM 1)添加到包含的CMakeLists.txt中。 有关此示例,请参阅here

对于问题的第二部分,有两种可能的方法。使用FILE(WRITE <filename> "QT5_CREATE_TRANSLATION(QM_FILES ${SOURCE_DIR}/src/app ${TRANSLATIONS} OPTIONS -I ${SOURCE_DIR}/src)")然后在add_custom_target中使用COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} -DTRANSLATIONS=${TRANSLATIONS} <filename>。我怀疑这是检索QM_FILES内容的好方法。 第二个选项是创建另外两个子目录,每个子目录都有一个QT5_CREATE_TRANSLATIONS和一个ADD_CUSTOM_TARGET调用。