我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})
Run Code Online (Sandbox Code Playgroud)
它*.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)
)
Run Code Online (Sandbox Code Playgroud)
但似乎我不能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)")
,然后COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} -DTRANSLATIONS=${TRANSLATIONS} <filename>
在 add_custom_target 中使用。我怀疑是否有一种检索 QM_FILES 内容的好方法。第二个选项是创建两个额外的子目录,每个子目录都有一个 QT5_CREATE_TRANSLATIONS 和一个 ADD_CUSTOM_TARGET 调用。