我有这个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调用。