只在构建根目录下安装部分包



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

我知道LIBFOO_CONFIG_SCRIPTS变量,但这只删除/bin目录中的文件,我也想从其他地方删除它们(libexec,/var,…)。对于与该库相关的非配置脚本,这种方法也会让人觉得有些笨拙。

如果没有autotools配置标志来更改安装选项,一个简单的方法是修补Makefile。

步骤如下:

  • 修改源Makefile。我在一个补丁中捕获您的更改。
  • 将你的补丁拷贝到全局补丁目录,它们将在构建包之前被应用。
  • 删除包的output/build目录并重新构建。
  • 此时,不需要的文件将不会安装到目标。

更详细的方法是"make package"。转到包的src目录。运行quilt为您自动生成补丁。修改源文件(Makefile.am),刷新补丁。将补丁复制回buildroot的全局补丁目录。完成后,builroot将修补Makefile。然后,它将生成适当的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_AUTORECONF = YES。

最新更新