我最近将我的Qt项目qmake从qmake移到了CMake构建系统,现在我正试图建立一个翻译系统。我试图使用qt5_create_translation宏(已记录here)来更新我的* .ts文件并生成* .qm文件。默认情况下,宏在源目录中创建(或更新)*。ts文件,在构建目录中创建* .qm文件,这非常合逻辑且易于使用。底层lupdate实用程序的性质是* .ts文件不能被破坏-它们只能被更新。因此,我的工作流程如下:

  • 添加或修改源或UI文件。
  • 重建项目:新的可翻译字符串将添加到* .ts文件中。
  • 立即将实际翻译添加到* .ts或“按原样”提交更改,以便以后添加翻译。
  • 将翻译添加到* .ts中后,立即重建项目以获取最新的* .qm文件。

  • 通过此工作流程,*。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/

    10-16 19:06