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



我有这个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})

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

但我想改进这一点,并获得两个自定义目标,这不会自动构建。一个用于将来自源的新字符串追加到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之后不丢失它们?

要解决make clean问题,请添加子目录(ADD_SUBDIRECTORY(translations))并将SET_DIRECTORY_PROPERTIES(PROPERTIES CLEAN_NO_CUSTOM 1)添加到包含的CMakeLists.txt中。请看这里的例子。

对于你问题的第二部分,有两种可能的方法。使用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调用。

相关内容

  • 没有找到相关文章

最新更新