编译QMYSQL驱动遇SBOM项目名称未设置错误求助
问题详情
按照Qt官方文档编译QMYSQL驱动,执行命令:
qt-cmake -G Ninja "C:\Qt1\6.8.1\Src\qtbase\src\plugins\sqldrivers" -DCMAKE_INSTALL_PREFIX="C:\Qt1\6.8.1\msvc2022_64" -DMySQL_ROOT="C:\Program Files\MySQL\MySQL Server 8.0"
出现CMake错误:
CMake Error at C:/Qt1/6.8.1/mingw_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake:2552 (message):
No SBOM project name was set.
Call Stack (most recent call first):
C:/Qt1/6.8.1/mingw_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake:2542 (_qt_internal_sbom_get_root_project_name_lower_case)
C:/Qt1/6.8.1/mingw_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake:2636 (_qt_internal_sbom_get_root_project_name_for_spdx_id)
C:/Qt1/6.8.1/mingw_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake:2603 (_qt_internal_sbom_generate_target_package_spdx_id)
C:/Qt1/6.8.1/mingw_64/lib/cmake/Qt6/QtPublicSbomHelpers.cmake:1926 (_qt_internal_sbom_record_target_spdx_id)
C:/Qt1/6.8.1/mingw_64/lib/cmake/Qt6/QtPluginHelpers.cmake:446 (_qt_internal_extend_sbom)
mysql/CMakeLists.txt:8 (qt_internal_add_plugin)
已尝试的无效操作:
- 在编译命令后添加
-DQT_NO_CREATE_SBOM=ON - 在
C:\Qt1\6.8.1\Src\qtbase\src\plugins\sqldrivers\mysql\CMakeLists.txt中添加set(QT_SBOM_PROJECT_NAME "mysql_driver")
解决方案
方法1:编译命令中直接指定根项目SBOM名称
在原有编译命令中添加根项目级的SBOM名称参数,覆盖层级配置缺失问题:
qt-cmake -G Ninja "C:\Qt1\6.8.1\Src\qtbase\src\plugins\sqldrivers" -DCMAKE_INSTALL_PREFIX="C:\Qt1\6.8.1\msvc2022_64" -DMySQL_ROOT="C:\Program Files\MySQL\MySQL Server 8.0" -DQT_SBOM_PROJECT_NAME="qt-sqldrivers"
方法2:修改根目录CMakeLists.txt
打开C:\Qt1\6.8.1\Src\qtbase\src\plugins\sqldrivers\CMakeLists.txt,在文件开头添加:
set(QT_SBOM_PROJECT_NAME "qt-sqldrivers")
保存后重新执行原编译命令即可。
方法3:修复Qt环境与编译器不匹配问题
错误路径显示使用的是mingw_64的Qt配置,但编译命令指定了msvc2022_64的安装前缀,存在环境冲突:
- 打开Qt提供的Qt 6.8.1 for MSVC 2022 64-bit命令行工具
- 在该环境下重新执行编译命令,确保CMake调用的是MSVC版本的Qt配置
补充说明
SBOM(软件物料清单)是Qt 6.8+新增的编译特性,插件编译时要求根项目明确设置SBOM名称。之前尝试的QT_NO_CREATE_SBOM=ON未生效,大概率是因为环境不匹配,或者需要在根层级设置而非仅插件层级。
内容的提问来源于stack exchange,提问作者Zesakg25

