TI AM437x 的 Qt6 Kit 在 Qt Creator 中无法选择,如何配置?
结论:先补齐目标平台的 Qt6 配置
当前配置中的 Qt version 为 None。对于要求 Qt6 的项目模板,这会使 Kit 无法满足模板条件。需要准备与 AM437x 工具链和 sysroot 配套的目标 Qt6 开发环境,将其注册到 Qt Creator,然后检查 Kit 是否还有其他错误。
这并不意味着 SDK 里没有 Qt6:它可能已经安装,只是 Qt Creator 尚未识别。单凭 Linux kernel 版本 6.12.49 和编译器路径,也无法确认 SDK 包含哪个 Qt 版本。Qt Creator 配置说明
为什么指定编译器和 sysroot 还不够?
原配置已经指定了 C/C++ 交叉编译器、目标 sysroot 和 CMake,但这些只描述了部分构建环境。编译 Qt6 应用还需要:
- 目标 ARM 平台的 Qt6 头文件和库。
Qt6Config.cmake及所需模块的 CMake 配置。- 在开发主机上运行的 Qt 构建工具,例如项目需要的
moc、rcc。 - 与目标平台一致的编译选项、库搜索路径和依赖配置。
交叉编译器在开发主机上运行,生成 ARM 程序;Qt6 库则必须面向目标板。Qt 官方交叉编译说明还要求准备适用的主机工具,并使用相同版本的主机 Qt 和目标 Qt,以避免兼容性问题。Qt 交叉编译说明
第一步:检查 SDK 实际包含的 Qt 组件
在安装 TI SDK 的 Linux 开发主机上执行以下命令,查找相关文件。这些文件是否存在,需要以实际安装情况为准:
SDK_ROOT=/root/SDK/ti-processor-sdk/linux-devkit
TARGET_SYSROOT="$SDK_ROOT/sysroots/armv7at2hf-neon-oe-linux-gnueabi"
HOST_SYSROOT="$SDK_ROOT/sysroots/x86_64-arago-linux"
find "$SDK_ROOT" -maxdepth 1 -type f -name 'environment-setup*'
find "$TARGET_SYSROOT/usr" -name 'Qt6Config.cmake'
find "$HOST_SYSROOT/usr" \
\( -name 'qmake*' -o -name 'qtpaths*' \
-o -name 'Qt6Toolchain.cmake' \
-o -name 'OEToolchainConfig.cmake' \)
根据查找结果处理:
- 找到目标 Qt6 的 CMake 配置和配套主机工具:继续注册 Qt version。
- 只有 Qt5:不能将其作为 Qt6 Kit 使用,需要补充 Qt6。
- 只有板端运行库:还需要对应的开发文件和主机工具,才能在主机上构建应用。
- 没找到
Qt6Config.cmake:先检查其他安装前缀;如果确实没有,就需要构建或重新生成包含 Qt6 的 SDK。
接着加载实际找到的 SDK 环境脚本。如果安装目录中存在下面这个文件,可以执行:
source /root/SDK/ti-processor-sdk/linux-devkit/environment-setup
qtcreator
如果脚本名带有目标平台后缀,请使用实际文件名。先退出已有的 Qt Creator,再从这个终端启动,让新进程继承环境。TI 的开发说明采用这种方式设置交叉编译环境;其中旧版 Qt 示例的目录和版本不能直接套用于 Qt6。TI SDK 环境配置示例
第二步:注册目标 Qt6
在 Qt Creator 的 Preferences > Kits > Qt Versions > Add 中,选择该交叉编译 Qt6 安装提供的 qmake,它需要能在开发主机上运行。支持通过 qtpaths 注册的 Qt Creator 版本,也可以选择相应工具。菜单位置可能随 Qt Creator 版本变化。添加 Qt versions
不要直接选择从板端复制来的 ARM 可执行文件,也不要用普通桌面 x86_64 Qt 代替目标 ARM Qt。
添加前,可以使用实际路径检查:
/actual/path/to/qmake -query
确认它报告的是 Qt6,且相关路径能够定位到该交叉编译安装的头文件、库和配置。如果执行失败,或路径仍指向旧的 SDK 安装位置,应先解决执行环境或安装重定位问题。
即使应用使用 CMake,Qt Creator 仍需要识别相应的 Qt version。注册 qmake 不代表必须把项目改成 qmake 构建。
第三步:补全 Kit 和 CMake 配置
检查 Kit 中的以下设置:
| 配置项 | 应检查的内容 |
|---|---|
| Build device | 在开发主机执行交叉编译时,选择开发主机 |
| Run device / Device type | 目标板对应的 Generic Linux Device |
| C/C++ Compiler | 原问题中的 TI SDK 交叉编译器,并确认与目标 ABI 匹配 |
| Sysroot | 原问题中的 ARM sysroot,并确认与板端用户空间配套 |
| Qt version | 上一步注册的目标 Qt6 |
| CMake tool | 能在开发主机执行,且满足所用 Qt6 和项目要求的 CMake |
| CMake configuration | 配套的交叉编译 toolchain file |
这些设置需要作为同一个构建环境一起检查。填写 Kit 的 sysroot 后,还要确认 CMake 实际使用的交叉编译配置。Kit 配置项说明
如果 SDK 包含 meta-qt6 提供的 Qt6Toolchain.cmake,可优先使用它,并在 Kit 的 CMake configuration 中设置实际绝对路径:
CMAKE_TOOLCHAIN_FILE:FILEPATH=/actual/sdk/path/Qt6Toolchain.cmake
该文件是 meta-qt6 为 SDK 和 Qt Creator 集成提供的配置入口,原问题并未证明现有 TI SDK 已经包含它。如果 SDK 只提供 OEToolchainConfig.cmake,应按其说明加载环境,并确认 CMake 能找到目标 Qt6,不能假定它会自动完成所有 Qt6 配置。meta-qt6 工具链说明
如果目标 Qt6 位于额外安装前缀,可按实际情况设置 Qt6_DIR,使其指向包含 Qt6Config.cmake 的目录。手工交叉编译的 Qt6 如需额外定位主机工具,再设置 QT_HOST_PATH;它应指向主机 Qt 安装,而不是 ARM sysroot。QT_HOST_PATH 说明
修改工具链或 Qt 安装后,使用新的构建目录重新配置,避免旧 CMake 缓存保留桌面编译器或其他 Qt 路径。
第四步:用最小项目验证构建环境
可以先验证 Qt Core 应用,将编译配置问题与图形驱动问题分开定位。下面的示例假设已准备好目标 Qt6 和配套 SDK;所选 Qt6 如果要求更高的 CMake 版本,应相应调整最低版本。
CMakeLists.txt:
cmake_minimum_required(VERSION 3.16)
project(am437x_qt_test LANGUAGES CXX)
find_package(Qt6 REQUIRED COMPONENTS Core)
add_executable(am437x_qt_test main.cpp)
target_link_libraries(am437x_qt_test PRIVATE Qt6::Core)
main.cpp:
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
qInfo() << "Qt version:" << qVersion();
return 0;
}
如果 SDK 确实提供 Qt6Toolchain.cmake,在按要求加载 SDK 环境后执行:
cmake -S . -B build-am437x \
-DCMAKE_TOOLCHAIN_FILE=/actual/sdk/path/Qt6Toolchain.cmake
cmake --build build-am437x
file build-am437x/am437x_qt_test
检查生成文件是否为目标 ARM 架构,部署匹配的运行库后在板端执行。上述代码用于验证,尚未在问题所述硬件上测试。
SDK 没有 Qt6 时,如何集成?
如果可以重建 TI SDK 对应的 Yocto/OpenEmbedded 系统,可优先评估加入与该 BSP、Yocto 分支兼容的 meta-qt6,将所需 Qt6 模块纳入目标镜像,并生成包含开发文件和主机工具的 SDK。meta-toolchain-qt6 是官方提供的 SDK 示例 recipe;应用 recipe 可按构建方式使用 inherit qt6-cmake。meta-qt6 集成说明
如果保留现有 TI SDK,也可以使用其工具链和 sysroot 单独交叉编译 Qt6。这需要准备同版本的主机 Qt 工具、合适的 CMake toolchain file,并明确目标安装位置与主机暂存位置。GUI 模块还要检查目标系统的图形依赖。嵌入式 Linux Qt 构建说明
目前缺少 TI Processor SDK 具体版本、Qt6 版本和板端图形栈信息,无法给出保证适用的 meta-qt6 分支、完整 Qt6 构建参数或 EGLFS 配置。kernel 移植完成后,GPU 用户态库、EGL/OpenGL ES 与 Qt Quick 仍可能需要适配。
仍然没有可选 Kit 时检查什么?
打开 Kit 的错误提示,根据具体信息检查:
- Qt version 是否仍为
None,或注册的其实是 Qt5。 - Qt 与编译器的架构、ABI 是否匹配。
- CMake 和构建工具是否能在开发主机运行。
- 项目模板是否要求 SDK 中未提供的 Qt 模块,例如 Qt Quick 相关模块。
- Qt Creator 是否实际继承了 SDK 环境。
SSH 设备配置主要用于部署、运行和远程调试,不能补齐缺失的 Qt6 开发环境。如果最小 Core 项目可以在命令行构建,而向导仍不显示 Kit,应重点检查 Kit 校验提示和模板筛选条件。
备注:内容仅供参考。
