Suppose you have build items A
,
B
, and C
, and suppose
that B
doesn't actually require
C
to build, but anyone who needs
B
also needs C
. In
this case, B
should declare a dependency
on C
, or B
and
C
should be combined. In other words, a
build item should depend on all build items that will be needed
if you use it.
Consider a concrete example. Suppose our three build items are
main
, lib-headers
, and
lib-src
. Suppose
lib-headers
doesn't have an
Abuild.mk
and doesn't actually build
anything. Instead, it just has an
Abuild.interface
that adds its directory to
your INCLUDES
variable. Suppose
lib-src
builds a library and has an
Abuild.interface
that adds the library
directory to LIBDIRS
and the library to
LIBS
. If main
uses the
library built by lib-src
but declares a
dependency on lib-headers
, then it will be
able to compile but not link. In order to link, it requires a
dependency on lib-src
. This means that
anyone that depends on lib-headers
must
also depend on lib-src
. Rather than
having this situation, make lib-src
's
Abuild.interface
append to
INCLUDES
and just eliminate the
lib-headers
build item entirely. It is
still okay to have the headers in a separate directory; just
don't place an Abuild.conf
in that
directory.