Yocto 如何更改基于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

我有一个基于autotools的BitBake配方,我希望在
/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除了这个方法还有别的方法吗。但是我的问题还是一样的,如果你只想改变一个特定配方的变量,就在配方本身中改变它们。