使用 BR2_EXTERNAL 修改 Buildroot 源包的 autotools 选项的正确方法是什么?

What is the proper method to modify the autotools options of a Buildroot source package using BR2_EXTERNAL?

我想在不更改基线 <pkg>.mk 文件的情况下更改 Buildroot 中包含的软件包的 <PKG>_CONF_OPTS 配置选项。根据我正在阅读的内容,没有必要使用 BR2_PACKAGE_OVERRIDE_FILE 完全覆盖包,因为我不想更改源或任何其他重要内容。

有人建议这可以使用 BR2_EXTERNALexternal.mk 来完成,但我找不到任何示例,我的尝试失败了。据我所知,Buildroot 文档在这个主题上只字未提,而是只解释了新包的创建,而不是包含包的构建定制。

我试过直接向 external.mk 添加行,就像在 <PKG>_CONF_OPTS += --new-option 中一样,但这没有效果。我还尝试在 package/<pkg>/<pkg>.mk 中创建一个补充 makefile,并在 Config.in 文件中为 "new" 包填写所需的信息,但这也失败了。

我参考了几个没有给出完整答案的相关问题,所以我希望找到一般方法并在此处记录下来。

How to pass extra custom ./configure autotools options to a Buildroot package?

希望我们能通过一些提示弄清楚这一点,然后为其他人记录下来。

编辑:对此做了相当多的测试,有趣的是,即使 "sanity check" 直接在现有包中对 _CONF_OPTS 进行更改的情况也没有达到预期效果影响。在我的例子中(尝试对一个特定包进行静态链接构建,同时让其他一切保持动态)我发现 _defconfig 中 BR2_STATIC_LIBS 的存在与否控制着最终构建命令的一切,尽管在整个构建日志中都承认相反。

BR2_EXTERNAL 并不意味着调整作为 Buildroot 本身一部分的现有包的配置选项。 BR2_EXTERNAL 仅用于添加新包。

您应该改为向您感兴趣的包添加一个 Config.in 选项,并使用它来调整其配置。

似乎没有令人满意的方法来实现这一点。在更详细地完成 make 过程后,我发现顶级 defconfig BR2_ 选项覆盖了各个包选项(例如,在我的例子中,存在或不存在 BR2_STATIC_LIBS)。