You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写Yocto Recipe时如何获取构建依赖的版本等元数据?

在Yocto Recipe中获取依赖包的元数据并嵌入自身软件包

当然可以获取构建依赖的元数据,以下是几种实用的实现方法:

1. 直接引用依赖包的元数据变量

Yocto会为每个构建依赖的包暴露核心元数据变量,格式为${[变量名]_[依赖包PN]},常用的有:

  • 获取依赖包的版本号:${PV_package_b}(PV是包的标准版本变量)
  • 获取git源的提交哈希:${SRCREV:package_b}(仅当package_b从git仓库构建时有效)

你可以把这些变量赋值给自定义变量,方便后续使用:

DEPENDS = "package_b"

# 自定义变量存储package_b的元数据
PACKAGE_B_SRCREV = "${SRCREV:package_b}"
PACKAGE_B_VERSION = "${PV_package_b}"

2. 生成头文件嵌入代码

最直接的方式是在编译前生成包含元数据的头文件,让软件代码直接引用:

do_compile:prepend() {
    # 在源码目录创建头文件存放目录(如果不存在)
    mkdir -p ${S}/include
    # 写入元数据到头文件
    cat > ${S}/include/package_b_info.h << EOF
#define PACKAGE_B_SRCREV "${PACKAGE_B_SRCREV}"
#define PACKAGE_B_VERSION "${PACKAGE_B_VERSION}"
EOF
}

之后在你的软件代码中,只需引入这个头文件就能使用这些宏定义。

3. 通过配置脚本传递元数据

如果你的软件使用autotools类配置系统,可以通过EXTRA_OECONF将元数据传递给configure脚本:

EXTRA_OECONF += "--with-package-b-version=${PACKAGE_B_VERSION} \
                 --with-package-b-srcrev=${PACKAGE_B_SRCREV}"

然后在configure.ac中添加对应参数的处理逻辑,就能把版本信息嵌入到编译后的程序中。

注意事项

  • SRCREV:package_b仅适用于基于git等版本控制系统构建的package_b,若package_b是tarball包,该变量可能不存在,此时优先使用PV_package_b。
  • 确保package_b的Recipe正确设置了PV变量,官方维护的Recipe通常都会规范设置。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 05:47:41