我目前正在为builroot构建一个基于autotools的包,但我只需要实际构建输出的一些部分(共享库和少数工具)。是否有一种方法可以只安装我需要的东西,类似于debian的*.install
文件,当一个包应该被拆分(如libfoo
和libfoo-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。