我想用 yocto SDK 交叉编译 Qt6.5。 首先,我编译了 Qt 主机版本,没有任何问题。
qt-host -> installation folder of host-build
qt-hostbuild -> build folder of host build
qt6-build -> build folder of device
qt6-device -> installation folder of device-build
主机构建:
cmake ../qt5/ -GNinja -DFEATURE_developer_build=ON -DQT_BUILD_EXAMPLES=OFF -DQT_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=$HOME/qt-host
交叉编译:
../qt5/configure -release -nomake examples -nomake tests -skip qtwebengine -skip qtwebkit -sysroot $HOME/sdk/sysroot/cortexa53-crypto-linux -qt-host-path $HOME/qt-host -extprefix $HOME/qt6-device -prefix /home/qt6 -- -DCMAKE_TOOLCHAIN_FILE=$HOME/toolchain.cmake
但是当我想配置设备的构建时,我在 qtwayland 子模块的配置过程中得到提示。
qtwayland/src/CMakeLists.txt:25 处的 CMake 警告(消息): QtWayland 缺少必需的依赖项,因此不会构建任何内容。 尽管这可能被视为错误,但配置仍然会 pass as coin(Qt 的持续集成系统)将在以下情况下失败: 配置失败,但仍会尝试在目标上配置模块 缺少依赖项。
我的设备使用 Wayland 和 Weston 合成器。 wayland-scanner 二进制文件位于 sysroot/x86_64-linux/usr/bin 文件夹中。
我在 qtwayland 的 CMakeLists.txt 中添加了三个输出,即输出变量 Wayland_FOUND、Wayland_VERSION 和 WaylandScanner_FOUND。
[QtWayland] Wayland_FOUND="TRUE"
[QtWayland] Wayland_VERSION="1.20.0"
[QtWayland] WaylandScanner_FOUND="FALSE"
所以主要问题是我认为 WaylandScanner_FOUND 是错误的。 但为什么没有找到呢? 这是我的 toolchain.cmake 文件。是不是少了点什么?
cmake_minimum_required(VERSION 3.18)
include_guard(GLOBAL)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(TARGET_SYSROOT /home/sdk/sysroots/cortexa53-crypto-linux)
set(CROSS_COMPILER /home/sdk/sysroots/x86_64-linux/usr/bin/aarch64-linux)
set(CMAKE_SYSROOT ${TARGET_SYSROOT})
set(CMAKE_FIND_ROOT_PATH ${TARGET_SYSROOT})
set(ENV{PKG_CONFIG_PATH} "")
set(ENV{PKG_CONFIG_LIBDIR} ${CMAKE_SYSROOT}/usr/lib/pkgconfig:${CMAKE_SYSROOT}/usr/share/pkgconfig)
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})
set(CMAKE_C_COMPILER ${CROSS_COMPILER}/aarch64-linux-gcc)
set(CMAKE_CXX_COMPILER ${CROSS_COMPILER}/aarch64-linux-g++)
set(QT_COMPILER_FLAGS "-march=armv8-a+crc+crypto ")
set(QT_COMPILER_FLAGS_RELEASE "-O2 -pipe")
set(QT_LINKER_FLAGS "-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
include(CMakeInitializeConfigs)
function(cmake_initialize_per_config_variable _PREFIX _DOCSTRING)
if (_PREFIX MATCHES "CMAKE_(C|CXX|ASM)_FLAGS")
set(CMAKE_${CMAKE_MATCH_1}_FLAGS_INIT "${QT_COMPILER_FLAGS}")
foreach (config DEBUG RELEASE MINSIZEREL RELWITHDEBINFO)
if (DEFINED QT_COMPILER_FLAGS_${config})
set(CMAKE_${CMAKE_MATCH_1}_FLAGS_${config}_INIT "${QT_COMPILER_FLAGS_${config}}")
endif()
endforeach()
endif()
if (_PREFIX MATCHES "CMAKE_(SHARED|MODULE|EXE)_LINKER_FLAGS")
foreach (config SHARED MODULE EXE)
set(CMAKE_${config}_LINKER_FLAGS_INIT "${QT_LINKER_FLAGS}")
endforeach()
endif()
_cmake_initialize_per_config_variable(${ARGV})
endfunction()
谢谢
好的,我明白了。 我在 Qt6 cross compil for imx6 with Wayland support
找到了最终提示您还必须为主机构建编译 Wayland 支持!