我将我的一些 Qt 项目移植到其中,CMake
以使它们在不同的 IDE 中更加灵活。
唯一可悲的部分是CMake
,当我生成 时VS solution
,它无法与 Qt VS Extension 一起使用,因此效果不佳。
例如,如果我更改了一个.ui
文件,我需要重新构建项目以便在 GUI 中看到与我使用 VS Extension 生成的项目相比的更改,它会自动识别更改并重新 moc 类拥有该.ui
文件,而无需重新构建整个项目。
如果我查看 VS Extension 在 .vcxproj 文件中生成的项目配置,它会添加ItemDefinitionGroup
一些项目,如下所示:
并且项目中包含的每个类/文件都将根据类的类型(QtMoc
, QtUic
, QtRcc
)进行标记:
可能这就是让 Qt VS Extension 识别如何处理每个文件的原因,所以如果是QtUic
,那么它会检查.ui
文件中是否存在任何更改,如果有新的更改,它将重新编译 ui 文件,然后moc 属于该.ui
文件的类,然后才重新编译拥有该.ui
文件的实际类。
总之,有没有什么可能的方法可以让 CMake 生成一个类似于我在 CMake 中选择 VS 生成器时生成的一个 Qt VS Extension 的项目?我猜 CMake 在内部不支持这一点,因为他们倾向于抽象所有这些行为以使所有 VS 项目尽可能通用,无论使用什么框架,但 CMake 确实有支持 Qt 的标志,例如:
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
因此,我假设实施起来不会有太多工作。
可能我最好的选择是分叉 CMake 并自己重新实现这种行为?伪示例:
if CMAKE_AUTOMOC == ON & CMAKE_VS_EXT == ON
Do some custom changes to the .vcxproj file
endif
对不起,很长的帖子,但任何想法和帮助将不胜感激。谢谢!