[Gambas-user] Nothing to be done

Tobias Boege taboege at gmail.com
Sun Dec 16 18:27:01 CET 2018

On Sun, 16 Dec 2018, Gianluigi wrote:
> A curiosity, does anyone know what this means:
> "make[2]: Nothing to be done for 'install-data-am'"
> in the Gambas compilation?

This message comes from `make`, which is the utility driving Gambas
compilation. It takes a Makefile as input which describes *targets*
of the build or installation process, together with *rules* for how
to reach a target and *dependencies* for each target, which can be
other targets.

make tries to reach its top target (e.g. a completely compiled Gambas),
by, recursively, reaching all the necessary dependenies and then
executing the rule to combine the dependencies to the top target.
But it does that parsimoniously: if all dependencies of a target are
up-to-date (e.g. source code was not modified since the last build),
then the target itself must be up-to-date. In that case there is
"nothing to be done" for the target. make is proud to tell you that,
because it just saved you a potential lot time by computing that
no actions are necessary instead of blindly executing them.

In your case that target is install-data-am, a target which installs
data files (judging by its name). It must have been determined that
the files have already been installed before and don't need to be
updated -- or there are no data files to insall in the first place.

How can that happen? Our Makefiles are not written by hand, but
autogenerated from simpler files. It's actually a multi-stage process
and quite a mess. The targets produced often contain redundancies[*].
As a result of that, you sometimes get targets which are just empty
for some subdirectories.

I think there was once an attempt to build Gambas with cmake instead
of autoconf and co., which resulted in a fraction of build times
if I remember correctly. I don't know if that work was lost -- I don't
have a copy of it anymore I think. Maybe it was on a svn branch?


[*] The -am suffix hints at this target coming from automake,
    which, to tell you the cold hard truth generates the files that
    are read by the program (which is also autogenerated, by the way)
    that generates the final Makefile... used to compile Gambas.
    See here for a hands-on explanation at a smaller scale than
    Gambas: http://mij.oltrelinux.com/devel/autoconf-automake/

"There's an old saying: Don't change anything... ever!" -- Mr. Monk

More information about the User mailing list