You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在NativeSDK中打包CMake模块?Yocto构建问题求助

解决Yocto中CMake模块打包及版本硬编码问题

针对你的问题,核心原因是硬编码了CMake版本号导致nativesdk包的路径不匹配,同时需要动态适配目标机和nativesdk环境的CMake路径。下面是分步解决方案:

1. 动态获取CMake版本,避免硬编码

在你的my-useful-modules.bb配方中添加以下代码,自动从Yocto的cmake构建环境中提取主次要版本号:

# 从CMAKE_VERSION变量中拆分主、次版本(inherit cmake后该变量已自动设置)
CMAKE_MAJOR_MINOR = "${@d.getVar('CMAKE_VERSION').split('.')[0]}.${@d.getVar('CMAKE_VERSION').split('.')[1]}"

2. 修正FILES_${PN}路径,适配目标机和nativesdk

用上面的动态变量替换硬编码的3.4,确保FILES路径和实际安装路径完全匹配:

FILES_${PN} += "${datadir}/cmake-${CMAKE_MAJOR_MINOR}/Modules/MYMODULES/*"

3. 确保do_install正确部署文件(可选,若源码无CMake安装规则)

如果你的源码没有通过CMakeLists.txt定义安装逻辑,需要手动添加do_install任务来创建目录并复制文件:

do_install() {
    # 创建目标目录结构
    install -d ${D}${datadir}/cmake-${CMAKE_MAJOR_MINOR}/Modules/MYMODULES/
    # 安装cmake模块文件,权限设置为644
    install -m 0644 ${EXTERNALSRC}/useful.cmake ${D}${datadir}/cmake-${CMAKE_MAJOR_MINOR}/Modules/MYMODULES/
}

为什么之前会报错?

你硬编码了cmake-3.4路径,但nativesdk环境中使用的CMake版本可能和目标机不一致,导致FILES指定的路径在nativesdk的image目录中不存在。Yocto的包检查会认为这些文件没有被任何包包含,从而抛出QA错误。使用动态版本变量后,不管是目标机还是nativesdk构建,都会自动匹配当前环境的CMake版本路径。

额外优化建议

如果你的源码使用CMakeLists.txt管理安装,建议在CMake脚本中使用官方变量定义路径,保持和Yocto配方的一致性:

install(FILES useful.cmake 
        DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake-${CMAKE_VERSION_MAJOR}.${CMAKE_VERSION_MINOR}/Modules/MYMODULES)

这样Yocto的cmake类会自动处理路径替换,无需手动在配方中重复定义。

内容的提问来源于stack exchange,提问作者kdopen

火山引擎 最新活动