首页 > 解决方案 > 在 buildroot 中仅安装包的一部分

问题描述

我目前正在为 buildroot 构建一个基于 autotools 的包,但我只需要实际构建输出的某些部分(共享库和一些工具)。有没有办法只安装我需要的东西,类似于 debian 的*.install文件,当一个包应该被拆分时(比如一个libfoolibfoo-dev包)。如果没有其他方法,我将不得不使用,LIBFOO_POST_INSTALL_TARGET_HOOKS但我想知道是否有更好的选择。

我知道这个LIBFOO_CONFIG_SCRIPTS变量,但这只会删除目录中的/bin文件,我也想从其他地方删除它们(libexec, /var, ...)。对于与该库相关的非配置脚本,这种方法也感觉很hacky。

标签: buildroot

解决方案


如果没有自动工具配置标志来更改安装选项,一种简单的方法是根据需要修补 Makefile.am。

以下是步骤:

  • 更改源 Makefile.am 在补丁中捕获您的更改。
  • 将您的补丁复制到全局补丁目录,它们将在构建包之前应用。
  • 删除包的输出/构建目录并重建它。
  • 此时,不需要的文件将不会安装到目标。

更详细的方法是“制作包”。转到包的 src。运行被子为您自动生成补丁。更改源(Makefile.am),刷新补丁。将补丁复制回 buildroot 的全局补丁目录。完成后,buildroot 将修补 Makefile.am,然后它将生成适当的 Makefile,并且不会按要求安装。

这是一个例子:

假设您已设置 BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL)/patches"

make package
cd output/build/package
quilt init . # output/build/package/patches now exists
quilt new 001-Makefile.am.do.not.install.patch
quilt add src/Makefile.am
# you edit src/Makefile.am here
quilt refresh # now patches/001-Makefile.am.do.not.install.patch exists
mkdir patch/to/global/patches # see BR2_GLOBAL_PATCH_DIR above
cp patches/*.patch patch/to/global/patches
cd ../../.. # got back to buildroot root to make
rm -rf output/build/package
make package

此时,您的补丁应该应用于 src 代码,并且您从 make install 过程中删除的文件不会在目标上。

确保 package.mk 文件中的 PACKAGE_AUTORECONF = YES,它会强制 buildroot 自动重新配置。


推荐阅读