CMake Qt5和AUTOUIC在触及.ui文件时不重建

6rqinv9w  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(230)

我有一个Qt 5项目,使用带有AUTOUICAUTOMOCAUTORCC的CMake。
我的问题是,如果我更改了其中一个.ui文件,我希望UIC运行并生成相应的ui_XXX. h文件,但实际上并没有。我在add_library(... Foo1.ui Foo2.ui)声明中列出了.ui文件。
这是在Windows和Visual Studio 2019上。我正在使用我的CMake产生的VS解决方案文件。据我所知,Auto UIC唯一运行的时间是在它构建库的时候;触摸任何源文件,所有内容都会按预期构建。只触摸一个.ui文件并进行构建,它不会构建任何内容。
在Linux上构建应用程序可以按预期工作。
我们刚刚将项目迁移到了CMake,以实现Windows和Linux之间的通用构建系统,像这样的怪癖让团队中的一些人感到烦恼,我们希望解决这些问题。

ncgqoxb0

ncgqoxb01#

这是一个已知的CMake issue,并已由this merge request (5999)修复。该问题特别提到了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}
)

相关问题