如何更改基于autotools的Bitbake配方的安装路径?

kar*_*bar 3 openembedded bitbake yocto

我有一个基于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} \
                  ...
Run Code Online (Sandbox Code Playgroud)

我认为,最简单的方法来完成我想要做的是简单地改变${bindir}${libdir},或者改变${prefix}/usr/local,但我还没有这方面的任何成功.有没有办法改变这些安装变量,或者我是否以错误的方式考虑这个问题?


更新:

策略1

根据Ross Burton的建议,我尝试将以下内容添加到我的食谱中:

prefix="/usr/local"
exec_prefix="/usr/local"
Run Code Online (Sandbox Code Playgroud)

但这会导致构建在该配方的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
Run Code Online (Sandbox Code Playgroud)

在没有这些修改变量的正常构建期间可以找到此包.我认为添加以下行可能允许系统找到glib的包元数据:

PKG_CONFIG_PATH = " ${STAGING_DIR_HOST}/usr/lib/pkgconfig  "
Run Code Online (Sandbox Code Playgroud)

但这似乎没有任何区别.

策略2

我也试着罗斯·伯顿的其他建议,这些变量赋值添加到我的发行版的配置文件,但是这使得它在失败meta/recipes-extended/tzdatado_install()任务.它返回DEFAULT_TIMEZONE is set to an invalid value.以下是错误的来源tzdata_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
Run Code Online (Sandbox Code Playgroud)

我假设我有一个问题${datadir},哪些引用${prefix}.

Ros*_*ton 6

你想改变一切或仅一个食谱的路径吗?不知道你为什么要改变一个食谱/usr/local,但不管怎样.

如果要更改所有这些,那么简单的方法是prefix在您的local.conf或发行版配置中设置(prefix = "/usr/local").

如果你想在特定的食谱中做到这一点,那么只需分配prefix="/usr/local"exec_prefix="/usr/local"在配方中就可以了.

这些变量定义的meta/conf/bitbake.conf,在这里你可以看到bindir就是$exec_prefix/bin,这可能是为什么分配prefix你没有工作.