当 .ui 文件被触及时,CMake Qt5 和 AUTOUIC 不 rebuilding

CMake Qt5 and AUTOUIC not rebuilding when .ui file touched

我有一个 Qt5 项目,使用 CMake AUTOUICAUTOMOCAUTORCC

我的问题是,如果我更改其中一个 .ui 文件,我希望 UIC 为 运行 并生成相应的 ui_XXX.h 文件。它没有。我的 add_library(... Foo1.ui Foo2.ui) 声明中列出了 .ui 文件。

这是在 Windows 和 Visual Studio 2019 年。我正在使用生成我的 CMake 的 VS 解决方案文件。据我所知,Auto UIC 运行s 的唯一时间是它正在构建库ui; touch任何源文件,一切都如预期的那样builds。只触摸一个 .ui 文件和 build,它不会 build 任何东西。

Bui在 Linux 上加载应用程序按预期工作。

我们刚刚将项目迁移到 CMake,用于 Windows 和 Linux 之间的通用 build 系统和 quirks 这样的问题在团队和我们想解决这些问题。

这是一个已知的 CMake issue,在撰写本文时尚未解决。该问题具体提到了 Visual Studio 2017,但其他 Visual Studio 生成器的问题也相同。

一种解决方法是使用 qt5_wrap_ui() 命令而不是依赖 CMAKE_AUTOUIC。这样,为每个明确列出的 .ui 文件创建一个 UIC 规则:

qt5_wrap_ui(MY_LIB_UI_FILES Foo1.ui Foo2.ui ...)
add_library(MyLib 
    ... 
    ${MY_LIB_UI_FILES}
)