【问题标题】:Qt internationalization and CMake: how to update *.ts and don't lose themQt 国际化和 CMake:如何更新 *.ts 并且不要丢失它们
【发布时间】:2014-07-28 13:09:48
【问题描述】:

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

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 之后不要丢失它们?

【问题讨论】:

    标签: qt cmake qt5


    【解决方案1】:

    要解决make clean问题,添加一个子目录(ADD_SUBDIRECTORY(translations))并在包含的CMakeLists.txt中添加SET_DIRECTORY_PROPERTIES(PROPERTIES CLEAN_NO_CUSTOM 1)。 有关示例,请参阅 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 调用。

    【讨论】:

    • 带有子目录的 SET_DIRECTORY_PROPERTIES(PROPERTIES CLEAN_NO_CUSTOM TRUE) 对我不起作用(使用 CMake 3.2.1):您发布的链接不可用,所以也许您可以详细说明您是如何做到的工作。如果我在顶级文件中指定 SET_DIRECTORY_PROPERTIES(PROPERTIES CLEAN_NO_CUSTOM TRUE) 它正在工作。我确实想删除所有其他生成的文件,所以这对我来说是一种解决方法。
    • 文件被移动了,我把它放在一个要点中并更新了链接。
    • 感谢@Jan 的回答!我不得不推迟这个项目的工作,而且我现在没有配置好的开发环境来检查你的建议。我会尽快将答案标记为已接受
    • 根据cmake.org/cmake/help/latest/prop_dir/CLEAN_NO_CUSTOM.html的文档,此解决方案仅适用于 Makefile 生成器
    猜你喜欢
    • 2011-08-03
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多