我在目录中有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
之后不要丢失它们?
答案 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调用。