我最近将我的Qt项目qmake从qmake移到了CMake构建系统,现在我正试图建立一个翻译系统。我试图使用qt5_create_translation
宏(已记录here)来更新我的* .ts文件并生成* .qm文件。默认情况下,宏在源目录中创建(或更新)*。ts文件,在构建目录中创建* .qm文件,这非常合逻辑且易于使用。底层lupdate
实用程序的性质是* .ts文件不能被破坏-它们只能被更新。因此,我的工作流程如下:
通过此工作流程,*。ts文件几乎总是与源文件同步,并且每次构建项目时都会生成* .qm文件。但是针对CMake的CMake和/或Qt5插件的思想遵循另一种方式。 CMake正确地将* .ts文件视为构建工件,因此它生成一条规则来删除
make clean
(从源树(!)中)。此行为至少已将tw记录为错误,但维护人员似乎坚持认为这不是错误,而是功能。我找到了ice来添加带有翻译和
CLEAN_NO_CUSTOM
的子目录,但是这些修改破坏了构建:向可执行目标添加* .qm文件不会将子目录添加至可执行依赖项列表。因此,build build无法找到* .qm文件并停止。添加自定义CMake目标和/或调用
lupdate
的命令会降低Qt5LinguistTools
模块和qt5_create_translation
宏的所有优势。添加advice之类的CMake选项看起来很丑陋,并且不会阻止开发人员在打开
make clean
时意外调用UPDATE_TRANSLATIONS
来丢失未提交的翻译。那么,将
qt5_create_translation
宏用于当前行为的正确方法是什么? 最佳答案
没有do ADD_SUBDIRECTORY
,
我只添加SET_DIRECTORY_PROPERTIES(PROPERTIES CLEAN_NO_CUSTOM TRUE)
致电之前
QT5_CREATE_TRANSLATION
关于c++ - CMake + Qt转换系统的正确工作流程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37960897/