适用于CMake + Qt翻译系统的工作流程

Ser*_*gey 7 c++ workflow qt translation cmake

我最近将我的Qt项目从qmake转移到CMake构建系统,现在我正在尝试建立一个翻译系统.我尝试使用qt5_create_translation宏(此处记录)来更新我的*.ts文件并生成*.qm文件.默认情况下,宏在源目录中创建(或更新)*.ts文件,在构建目录中创建*.qm文件,这非常合乎逻辑且方便使用.底层lupdate实用程序的本质是*.ts文件无法销毁 - 它们可能只是更新.所以我看到我的工作流程如下:

  1. 添加或修改源文件或UI文件.
  2. 重建项目:新的可翻译字符串将添加到*.ts文件中.
  3. 现在将实际翻译添加到*.ts或按原样提交更改,以便稍后添加翻译.
  4. 只要将翻译添加到*.ts,就重建项目以获取最新的*.qm文件.

使用此工作流*.ts文件几乎总是与源文件同步,每次构建项目时都会生成*.qm文件.但CMake的CMake和/或Qt5插件的意识形态则采用另一种方式.CMake正确地将*.ts文件视为构建工件,因此它会生成一个删除它们的规则(来自源树(!))make clean.这种行为至少是TW 注册为一个bug,但维护似乎坚持认为,这不是一个错误,而是一个功能.

我找到了一个添加带翻译的子目录的建议CLEAN_NO_CUSTOM,但是这些修改打破了构建:将*.qm文件添加到可执行目标不会将子目录添加到可执行依赖项列表.因此构建版本无法找到*.qm文件并停止.

添加自定义CMake目标和\或命令调用会lupdate减损Qt5LinguistTools模块和qt5_create_translation宏的所有优点.

这里添加一个CMake选项看起来像一个丑陋的解决方法,并没有让开发人员通过意外调用make clean何时UPDATE_TRANSLATIONS打开来避免失去未提交的翻译.

那么,将qt5_create_translation宏用于现今行为的正确方法是什么?

小智 -3

没有do ADD_SUBDIRECTORY

我只是添加SET_DIRECTORY_PROPERTIES(PROPERTIES CLEAN_NO_CUSTOM TRUE)

打电话之前

QT5_CREATE_TRANSLATION
Run Code Online (Sandbox Code Playgroud)