I want to set the same LDADD attribute (Unit test library) to a large number of targets (unit test C++ files). I first though that maybe automake has AM_LDADD variable to add that library to all the targets within the file but is not the case. In some mail list I found some short discussion asking to add it: http://gnu-automake.7480.n7.nabble.com/AM-LIBS-AM-LDADD-td3698.html
My question is, how do you deal with that? is it there any way to avoid manually adding LDADD attribute to each target?
So far my Makefile.am looks like:
test1_SOURCES = ...
test1_LDADD = -llibrary
...
...
test20_SOURCES = ...
test20_LDADD = -llibrary
The equivalent of an
AM_LDADD
variable is simplyLDADD
. e.g.,If you need to override
LDADD
for a particular program:prog
, thenprog_LDADD
will always take precedence.I always assumed that since there was no
LDADD
standard environment variable passed toconfigure
- as you can see withconfigure --help
- there is no real reason for anAM_LDADD
. This kind of makes sense, as theconfigure
script, and any options, e.g.,--with-foo=<path>
should (ideally) work out the library dependencies.On the other hand, passing
CFLAGS
viaconfigure
might still need anAM_CFLAGS
that combinesCFLAGS
and with other compiler flags determined by the configure script; or even afoo_CFLAGS
override. Sinceconfigure
must be informed of your customCFLAGS
.Also, I don't know if the
test<n>
programs only take a single C++ source file, but if so, you can simplify theMakefile.am
with:as described here.
In regards to your comment, your can use a convenience library for that purpose - which is particularly useful for common code used by test programs:
It's a bad idea to modify
LDADD
in your Makefile.am, even if it seems convenient. It will make your build system very fragile.In particular, if the user attempts to override
LDADD
from themake
command line, then your definition ofLDADD
inMakefile.am
will disappear. It's not unreasonable to expect that a user might overrideLDADD
, so you should definitely protect yourself against this situation.Your original definitions of
test1_LDADD
, ...,test20_LDADD
are much more robust and, as far as I understand the automake manual, the recommended use.See the remarks here for more info: https://www.gnu.org/software/automake/manual/html_node/User-Variables.html https://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html