buildroot - 在 buildroot 中仅安装包的一部分
问题描述
我目前正在为 buildroot 构建一个基于 autotools 的包,但我只需要实际构建输出的某些部分(共享库和一些工具)。有没有办法只安装我需要的东西,类似于 debian 的*.install
文件,当一个包应该被拆分时(比如一个libfoo
和libfoo-dev
包)。如果没有其他方法,我将不得不使用,LIBFOO_POST_INSTALL_TARGET_HOOKS
但我想知道是否有更好的选择。
我知道这个LIBFOO_CONFIG_SCRIPTS
变量,但这只会删除目录中的/bin
文件,我也想从其他地方删除它们(libexec
, /var
, ...)。对于与该库相关的非配置脚本,这种方法也感觉很hacky。
解决方案
如果没有自动工具配置标志来更改安装选项,一种简单的方法是根据需要修补 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 自动重新配置。
推荐阅读
- c# - 如何正确解决警告 CS1998:此异步方法缺少“等待”(不压制它)?
- java - 如何使用 JPA-Entities 作为 maven 的依赖项
- html - 带有空格的 html textarea 中的缩进不能按预期工作
- typescript - VSCode 中的打字稿推理不起作用?
- android - 应用在后台时安装灵活的应用内更新
- android - 当cardview在recyclerview中被swpied时如何从firebase中删除对象>
- django - 无法在 django 部署应用程序中重新启动 nginx
- excel - 如果数据在 dd:hh:mm:ss 中,有没有办法获得平均时间?
- c++ - 通过右值修改对象值
- django - 如何准备 django 应用程序以部署在服务器上?