如何更改基于 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/tzdata
的 do_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"
我有一个基于 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/tzdata
的 do_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"