我正在使用 yocto 构建我的自定义 Linux 发行版。我需要添加hiredis
到我的发行版中。赫里迪斯是一个用于 Redis 数据库的简约 C 客户端库,我需要它来通过 C 应用程序访问 Redis。
食谱hiredis_0.14.0.bb
在我的 yocto 构建系统中,配方hiredis_0.14.0.bb
存储在文件夹meta-openembedded/meta-oe/recipes-extended/hiredis
so 中的元层中meta-openembedded
。
菜谱内容如下:
DESCRIPTION = "Minimalistic C client library for Redis"
HOMEPAGE = "http://github.com/redis/hiredis"
LICENSE = "BSD-3-Clause"
SECTION = "libs"
DEPENDS = "redis"
LIC_FILES_CHKSUM = "file://COPYING;md5=d84d659a35c666d23233e54503aaea51"
SRCREV = "685030652cd98c5414ce554ff5b356dfe8437870"
SRC_URI = "git://github.com/redis/hiredis;protocol=git \
file://0001-Makefile-remove-hardcoding-of-CC.patch"
S = "${WORKDIR}/git"
inherit autotools-brokensep pkgconfig
EXTRA_OEMAKE = "PREFIX=${prefix} LIBRARY_PATH=${baselib}"
# By default INSTALL variable in Makefile is equal to 'cp -a', which preserves
# ownership and causes host-user-contamination QA issue.
# And PREFIX defaults to /usr/local.
do_install_prepend() {
export INSTALL='cp -r'
}
Git Fetcher 下载0.14.0
hiredis版本
如果我执行以下命令:
> bitbake hiredis
代码hiredis
是通过获取的GitHub并正确编译。从GitHub下载的代码上的版本是0.14.0,而SRC_URI
设置为:
SRC_URI = "git://github.com/redis/hiredis;protocol=git \
file://0001-Makefile-remove-hardcoding-of-CC.patch"
该值表示SRC_URI
正在使用Git 抓取器和 不是指定参数branch
或rev
,这意味着该参数的值为master
。
对版本的唯一引用0.14.0
是在配方名称 (hiredis_ 0.14.0
.bb) 中,因此选择版本是因为变量0.14.0
的值为(该值由配方名称设置)。PV
0.14.0
PV
我的问题
为什么获取的hiredis库版本是最新的0.14.0
而不是最新的?
答案1
正如@Kusalananda 在他的评论中所说:
从 GitHub 下载的版本
hiredis
是通过分配给变量的提交哈希来选择的SRCREV
。
例如,要获取并编译 1.0.1 版本,hiredis
我可以向该文件夹添加my-meta-layer/recipes-extended/hiredis
一个文件hiredis_%.bbappend
,并在其中将 的值设置SRC_REV
为等于 1.0.1 版本的提交哈希值(即8d1bfac4640fe90cd6f800d09b7f53e886569b98
)。
在问题所示的配方的情况下,hiredis_0.14.0.bb
我还需要更改变量的值SRC_URI
。
添加的文件内容hiredis_%.bbappend
如下所示:
# SRC_URI for release 1.0.1
SRC_URI = "git://github.com/redis/hiredis;protocol=https;branch=master"
# Commit Hash of release 1.0.1
SRCREV = "8d1bfac4640fe90cd6f800d09b7f53e886569b98"
inherit cmake
bbappend 文件的说明
- 通过该值,我设置了Git Fetcher 的
SRC_URI
参数值(而不是在原始配方中,它们的值已设置且未设置)protocol=https;branch=master
protocol=git
branch
- 设置
SRCREV
等于版本 1.0.1 的提交哈希值 - 添加指令
inherit cmake
,因为版本 1.0.1 使用 CMake
我的解决方案不适用于所有版本hiredis
我认为我的解决方案可能是许多 yocto 食谱问题中提出的问题的通用解决方案,但在这种情况下,hiredis
它并不总是有效。
我已经测试了某些版本的解决方案,结果如下:
- 适用于版本 0.14.0、1.0.1、1.0.2
- 不行对于版本 0.14.1