What is the proper method to modify the autotools

2019-08-06 04:55发布

问题:

I want to change the <PKG>_CONF_OPTS config options for a package included in Buildroot without altering the baseline <pkg>.mk file. Based on what I'm reading, it shouldn't be necessary to completely override the package using the BR2_PACKAGE_OVERRIDE_FILE as I don't want to change the source or anything else significant.

It has been suggested that this can be done using BR2_EXTERNAL and external.mk, but I cannot find any examples and my attempts have failed. The Buildroot documentation is quite silent on this topic, as near as I can tell, and instead only explains the creation of new packages rather than the build customization of included packages.

I have tried adding lines to external.mk directly as in <PKG>_CONF_OPTS += --new-option but this has no effect. I have also tried creating a supplementary makefile in package/<pkg>/<pkg>.mk and filling in the needed information in the Config.in files for a "new" package but this has also failed.

I have referenced a couple of related questions that do not have complete answers given, so I am hoping to discover the general method and document it here.

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

Buildroot: Build only one package as both shared and static lib, all others shared only

Hopefully with a couple hints we can get this figured out and then documented for others.

EDIT: Done quite a bit of testing with this, and it's interesting to note that even the "sanity check" case of making the changes to _CONF_OPTS directly in the existing package is not having the desired effect. In my case (trying to do a static linkage build of one particular package while leaving everything else dynamic) I find that the presence or absence of BR2_STATIC_LIBS in the _defconfig controls everything when it comes down to the final build command, despite acknowledgement to the contrary all throughout the build logs.

回答1:

BR2_EXTERNAL is not meant to adjust the configuration options of an existing package that is part of Buildroot itself. BR2_EXTERNAL is only meant to add new packages.

You should instead add a Config.in option to the package you're interested in, and use that to tweak its configuration.



回答2:

It would appear that there is no satisfactory way to accomplish this. After going through the make process in more detail, I find that the top level defconfig BR2_ options override the individual package options (such as, in my case, the presence or absence of BR2_STATIC_LIBS).