SuperAPI AI 工具集

qt-compatibility-build

编程与开发

查看项目

更新于 10-16 01:13

技能介绍

用途:让同一份 CMake 工程同时适配 deepin V25(Qt6)与 V20(Qt5),并让 DTK 依赖随检测到的 Qt 版本自动映射,去掉构建系统中的硬编码版本引用。

主要能力:自动检测 Qt 主版本(优先 Qt6,回退 Qt5);将 Qt 主版本映射为 DTK 主版本(Qt6→DTK6,Qt5→DTK5);动态化 find_package 与 target_link_libraries;按 debian/control(V25/Qt6)与 debian/control.1(V20/Qt5)拆分依赖文件。

使用方式:在 CMakeLists.txt 顶部加入检测,如 find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core),并用 QT_VERSION_MAJOR 匹配设置 DTK_VERSION_MAJOR。随后把所有 find_package 改为动态形式,如 find_package(Qt${QT_VERSION_MAJOR} COMPONENTS ${QT} REQUIRED)、find_package(Dtk${DTK_VERSION_MAJOR}Widget REQUIRED);链接改为 Qt${QT_VERSION_MAJOR}::Core、Dtk${DTK_VERSION_MAJOR}::Core。替换规则:Qt5:: 与 Qt6:: 改为 Qt${QT_VERSION_MAJOR}::,Dtk:: 与 Dtk6:: 改为 Dtk${DTK_VERSION_MAJOR}::。翻译生成可加入 cmake/translation-generate.cmake 并调用 TRANSLATION_GENERATE。构建示例:V25 用 cmake -B build -DQT_DIR=/usr/lib/x86_64-linux-gnu/cmake/Qt6,V20 用 cmake -B build5 -DQT_DIR=/usr/lib/x86_64-linux-gnu/cmake/Qt5,其中 -DQT_DIR 为本地便利项,未指定时 CMake 自动检测。依赖映射:qt6-base-dev/qtbase5-dev、qt6-tools-dev/qttools5-dev、qt6-svg-dev/libqt5svg5-dev、libdtk6widget-dev/libdtkwidget-dev、libdtk6core-dev/libdtkcore-dev。

适用场景:CMakeLists.txt 中在 target_link_libraries 硬编码 Qt5::/Qt6::,或在 find_package/链接中硬编码 Dtk::/Dtk6::;需同代码同时构建 V25 与 V20;需按检测到的 Qt 版本动态链接库;DTK 依赖需自动映射。

限制:不适用于没有 CMake 构建系统的工程、无 Qt 依赖的工程、仅支持单版本(仅 V25 或仅 V20)的工程。常见错误包括遗漏 DTK_VERSION_MAJOR 映射、只用单个 control 文件、在单个 control 中用 OR 依赖、仅测试一个 Qt 版本、未使用 find_package(QT NAMES Qt6 Qt5 ...) 检测。相关资料未提供其他收费、平台或效果信息。