在 buildroot 中只安装一部分包

Install only part of a package in buildroot

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

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

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

步骤如下:

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

更详细的方法是“打包”。转到包的 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 进行 autoreconf。