我正在使用 yocto 构建我的自定义 Linux 发行版。我需要添加hiredis
到我的发行版中。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
代码由GitHubhiredis
获取并正确编译。从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 Fetcher并且未指定参数branch
,或者rev
表示该参数的值为master
。
对版本的唯一引用0.14.0
是在配方名称 (hiredis_ 0.14.0
.bb) 中,因此选择版本是0.14.0
因为变量的值为(该值由配方名称设置)。PV
0.14.0
PV
我的问题
为什么获取的hiredis库版本是0.14.0
最新的而不是最新的?
正如@Kusalananda 在他的评论中所说:
例如,要获取并编译 1.0.1 版本,
hiredis
我可以向该文件夹添加my-meta-layer/recipes-extended/hiredis
一个文件hiredis_%.bbappend
,并在其中将 的值设置为等于 1.0.1 版本的提交哈希值SRC_REV
(即8d1bfac4640fe90cd6f800d09b7f53e886569b98
)。在问题所示的配方的情况下,
hiredis_0.14.0.bb
我还需要更改变量的值SRC_URI
。添加的文件内容
hiredis_%.bbappend
如下所示:bbappend 文件的说明
SRC_URI
值,我设置了 Git Fetcher 的参数值protocol=https;branch=master
(而不是在原始配方中,它们的值已设置protocol=git
且未branch
设置)SRCREV
等于版本 1.0.1 的提交哈希值inherit cmake
,因为版本 1.0.1 使用 CMake我的解决方案不适用于所有版本
hiredis
我认为我的解决方案可能是许多 yocto 食谱问题中提出的问题的通用解决方案,但在这种情况下,
hiredis
它并不总是有效。我已经测试了某些版本的解决方案,结果如下: