如何通过BR2_EXTERNAL修改Buildroot包的<PKG>_CONF_OPTS配置选项?
嘿,我之前刚好折腾过这个需求,用BR2_EXTERNAL来调整Autotools包的配置选项完全可行,完全不用碰主Buildroot源码树里的<PKG>.mk文件,也不需要用BR2_PACKAGE_OVERRIDE_FILE覆写整个包。下面给你一步步拆解具体操作:
核心原理
BR2_EXTERNAL的设计就是让我们在外部目录扩展Buildroot的配置,对于软件包来说,我们可以在外部目录创建对应包的.mk文件,通过继承主源码树的原有配置,只覆盖我们需要修改的_CONF_OPTS参数,其他配置会自动沿用主树的设置。
具体操作步骤
1. 搭建BR2_EXTERNAL目录结构
首先创建你的外部扩展目录,比如叫my-buildroot-external,然后在里面建立对应软件包的目录(包名必须和主Buildroot里的完全一致,大小写、下划线都不能错):
mkdir -p my-buildroot-external/package/<你的包名>
举个例子,如果要修改libpng的配置,就创建my-buildroot-external/package/libpng/
2. 创建外部包的.mk文件
在刚才创建的包目录下,新建一个和主树里同名的.mk文件(比如libpng.mk),内容格式如下:
# 先引入主源码树里的原包配置,确保继承所有原有设置 include $(TOPDIR)/package/libpng/libpng.mk # 追加或修改Autotools配置选项 # 用+=是在原有选项基础上追加,用=则是完全替换原有所有选项 LIBPNG_CONF_OPTS += \ --enable-custom-feature \ --disable-unwanted-feature
- 如果只是要添加新的选项,用
+=最安全,不会破坏原有的配置; - 如果需要完全替换所有配置选项,就用
=,但这时候你需要把主树里原有的LIBPNG_CONF_OPTS内容复制过来,再加上你的修改,避免丢失必要配置。
3. 让Buildroot识别你的外部扩展目录
有两种方式配置:
- 图形化方式:在Buildroot目录下运行
make menuconfig,进入Build options->Global build settings->Enable custom external tree,然后输入你的my-buildroot-external目录的绝对路径; - 直接修改.config:在Buildroot的
.config文件里添加一行:BR2_EXTERNAL="/绝对路径/my-buildroot-external"
4. 验证配置是否生效
运行以下命令重新配置并编译目标包:
make <你的包名>-reconfigure make <你的包名>-rebuild
之后可以去Buildroot的build/<你的包名>-<版本号>/目录下查看config.log或config.status,确认你的自定义选项已经被应用。
注意事项
- 包名必须严格匹配:主树里的包目录是
package/foo/foo.mk,你外部的就必须是external/package/foo/foo.mk,名字错了Buildroot会找不到; - Autotools选项优先级:如果原包配置里有和你追加的选项冲突的(比如原先是
--enable-foo,你追加--disable-foo),Autotools会以最后出现的选项为准,所以这种情况追加是有效的; - 避免重复include:不要在外部.mk里重复定义主树已经有的其他变量(比如
_VERSION、_SOURCE等),除非你确实需要修改,否则直接继承即可。
内容的提问来源于stack exchange,提问作者T S
相关产品推荐
相关产品推荐

