Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当接触.ui文件时,CMake Qt5和AUTOUIC不重建_Qt_Cmake_Uic - Fatal编程技术网

当接触.ui文件时,CMake Qt5和AUTOUIC不重建

当接触.ui文件时,CMake Qt5和AUTOUIC不重建,qt,cmake,uic,Qt,Cmake,Uic,我有一个Qt5项目,使用CMake和AUTOUIC,AUTOMOC,以及AUTORCC 我的问题是,如果我更改了其中一个.ui文件,我希望UIC运行并生成相应的ui_XXX.h文件。没有。我的add\u库(…Foo1.ui Foo2.ui)声明中列出了.ui文件 这是在Windows和Visual Studio 2019上实现的。我正在使用我的CMake生成的VS解决方案文件。据我所知,AutoUIC运行的唯一时间是它是否正在构建库;触摸任何源文件,所有内容都会按预期生成。只需点击一个.ui文件

我有一个Qt5项目,使用CMake和
AUTOUIC
AUTOMOC
,以及
AUTORCC

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

这是在Windows和Visual Studio 2019上实现的。我正在使用我的CMake生成的VS解决方案文件。据我所知,AutoUIC运行的唯一时间是它是否正在构建库;触摸任何源文件,所有内容都会按预期生成。只需点击一个.ui文件并构建,它就不会构建任何东西

在Linux上构建应用程序的效果与预期一样

我们刚刚将该项目迁移到CMake,用于Windows和Linux之间的通用构建系统,这样的怪癖困扰着团队中的一些人,我们希望解决它们。

这是一个已知的CMake,在撰写本文时尚未解决。本期特别提到Visual Studio 2017,但其他Visual Studio生成器也会遇到同样的问题

解决方法之一是使用该命令,而不是依赖于
CMAKE\u AUTOUIC
。这样,将为明确列出的每个
.ui
文件创建UIC规则:

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

使用为每个
.ui
文件创建UIC规则是否可以解决此问题?你试过这个吗?我在一个小项目上试过qt5_wrap_ui(),这个项目只有几个.ui文件,而且似乎可以通过最少的测试工作。我们有一个包含大约350个.ui文件的大型库,我们希望AUTOUIC的东西能够正常工作,因为没有人想维护包含所有这些.ui文件的CMake文件。我在CMake问题跟踪程序中发现了一个问题(请参见答案),但不幸的是,它尚未得到修复。如果选择使用
qt5\u wrap\u ui()
,则可以转到包含
.ui
文件的目录,并在Windows
cmd
提示符下使用命令
dir/b/a-d
列出所有文件名,并将输出复制/粘贴到CMake中。希望这有帮助!