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

How can I change the installation path of an autotools-based Bitbake recipe?

我有一个基于 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() 任务期间失败,并且 returns 以下内容:

| 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/tzdatado_install() 任务期间失败。 returns 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

我假设我遇到了 ${datadir} 的问题,它引用了 ${prefix}

您要更改所有内容的路径还是只更改一个食谱?不确定您为什么只想将一种食谱更改为 /usr/local,但无论如何。

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

如果你想在特定的配方中这样做,那么只需在配方中分配 prefix="/usr/local"exec_prefix="/usr/local" 即可。

这些变量在 meta/conf/bitbake.conf 中定义,您可以在其中看到 bindir$exec_prefix/bin,这可能是分配 prefix 对您不起作用的原因。

你的第一个策略是正确的,但你只改变 "prefix" 就破坏了你想要的东西。如果您查看 sources/poky/meta/conf/bitbake.conf,当您将变量 "prefix" 设置为“/usr”以外的其他内容(就像我的情况一样)时,您会发现您正在破坏的一切。为了仅使用手动配置的“--prefix”选项修改安装路径,我需要设置该配方中列出的所有变量:

prefix="/your/install/path/here"
datadir="/usr/share"
sharedstatedir="/usr/com"
exec_prefix="/usr"