当 .ui 文件被触及时,CMake Qt5 和 AUTOUIC 不 rebuilding
CMake Qt5 and AUTOUIC not rebuilding when .ui file touched
我有一个 Qt5 项目,使用 CMake AUTOUIC
、AUTOMOC
和 AUTORCC
。
我的问题是,如果我更改其中一个 .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}
)
我有一个 Qt5 项目,使用 CMake AUTOUIC
、AUTOMOC
和 AUTORCC
。
我的问题是,如果我更改其中一个 .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}
)