Yocto 如何更改基于autotools的Bitbake配方的安装路径?
我有一个基于autotools的BitBake配方,我希望在Yocto 如何更改基于autotools的Bitbake配方的安装路径?,yocto,bitbake,openembedded,Yocto,Bitbake,Openembedded,我有一个基于autotools的BitBake配方,我希望在/usr/local/bin中安装二进制文件,在/usr/local/lib中安装库(而不是默认目标目录/usr/bin和/usr/lib) 下面是我发现很重要的autotools.bbclass文件的一部分 CONFIGUREOPTS = " --build=${BUILD_SYS} \ --host=${HOST_SYS} \ --target=${TARGET
/usr/local/bin
中安装二进制文件,在/usr/local/lib
中安装库(而不是默认目标目录/usr/bin
和/usr/lib
)
下面是我发现很重要的autotools.bbclass
文件的一部分
CONFIGUREOPTS = " --build=${BUILD_SYS} \
--host=${HOST_SYS} \
--target=${TARGET_SYS} \
--prefix=${prefix} \
--exec_prefix=${exec_prefix} \
--bindir=${bindir} \
--sbindir=${sbindir} \
--libexecdir=${libexecdir} \
--datadir=${datadir} \
--sysconfdir=${sysconfdir} \
--sharedstatedir=${sharedstatedir} \
--localstatedir=${localstatedir} \
--libdir=${libdir} \
...
我认为完成我想做的事情最简单的方法就是简单地改变${bindir}
和${libdir}
,或者把${prefix}
改成/usr/local
,但我在这方面没有取得任何成功。有没有办法更改这些安装变量,或者我的想法是错误的
更新: 战略1 根据Ross Burton的建议,我尝试在我的食谱中添加以下内容:
prefix="/usr/local"
exec_prefix="/usr/local"
但这会导致生成在该配方的do_configure()
任务期间失败,并返回以下内容:
| checking for GLIB... no
| configure: error: Package requirements (glib-2.0 >= 2.12.3) were not met:
|
| No package 'glib-2.0' found
在正常构建过程中,可以在没有这些修改变量的情况下找到此包。我认为添加以下行可以让系统找到glib的包元数据:
PKG_CONFIG_PATH = " ${STAGING_DIR_HOST}/usr/lib/pkgconfig "
但这似乎没有什么区别
战略2
我还尝试了Ross Burton的其他建议,将这些变量分配添加到我的发行版的配置文件中,但这会导致它在meta/recipes extended/tzdata
的do_install()
任务中失败。它返回DEFAULT\u时区设置为无效值。
以下是tzdata\u 2015g.bb的错误源
# Install default timezone
if [ -e ${D}${datadir}/zoneinfo/${DEFAULT_TIMEZONE} ]; then
install -d ${D}${sysconfdir}
echo ${DEFAULT_TIMEZONE} > ${D}${sysconfdir}/timezone
ln -s ${datadir}/zoneinfo/${DEFAULT_TIMEZONE} ${D}${sysconfdir}/localtime
else
bberror "DEFAULT_TIMEZONE is set to an invalid value."
exit 1
fi
我假设我对${datadir}
有问题,它引用了${prefix}
您想更改所有配方的路径还是只更改一个配方?不知道你为什么只想把一个菜谱改成/usr/local
,但不管怎样
如果您想更改所有这些配置,那么简单的方法是在local.conf
或发行版配置(prefix=“/usr/local”
)中设置prefix
)
如果您想在特定配方中执行此操作,则只需在配方中分配prefix=“/usr/local”
和exec\u prefix=“/usr/local”
这些变量在meta/conf/bitbake.conf
中定义,您可以看到bindir
是$exec\u prefix/bin
,这可能就是分配前缀对您不起作用的原因。您的第一个策略是正确的,但您只更改了“prefix”,结果比您想要的要大。如果您查看sources/poky/meta/conf/bitbake.conf,您会发现当您将变量“prefix”设置为“/usr”以外的值时(就像我的情况一样),您所做的一切都会被破坏。为了仅使用手动配置的“-prefix”选项修改安装路径,我需要设置该配方中列出的所有变量:
prefix="/your/install/path/here"
datadir="/usr/share"
sharedstatedir="/usr/com"
exec_prefix="/usr"
谢谢你的帮助!我试图实施你的建议,但还没能奏效。如果你能再看看我的改变和结果,我会非常感激的。你设置了前缀吗?记住也要设置exec_前缀。是的,我也设置了exec_前缀
。@karobar你是如何解决的。我试过在我的例子中,如果我使用你的答案,它会起作用,但它会影响其他配方,比如systemd,因为它也指向exec\u前缀
。Ross Burton除了这个方法还有别的方法吗。但是我的问题还是一样的,如果你只想改变一个特定配方的变量,就在配方本身中改变它们。