[build2] Listing available targets

Boris Kolpackov boris at codesynthesis.com
Thu Jul 4 06:44:36 UTC 2019


Per Edin <per.edin at sequence-point.se> writes:

> Is it possible to list available targets in the current directory
> similar to what is usually output when you run "make help"?

Not at the moment. But we could do this fairly easily, I think
(but see below).


> I sometimes find it difficult to figure out what to type to just
> compile a single .cxx-file.

This might be problematic. If you have something like this in your
buildfile:

exe{foo}: cxx{foo}

There is actually no obje{foo} target until a rule for building
exe{foo} is matched which synthesizes the 'obje{foo}: cxx{foo}'
dependency.

To have obje{foo} listed by such a hypothetical [meta-]operation,
you would have to spell your dependencies explicitly, which would
be a pain:

exe{foo}: obje{foo}
obje{foo}: cxx{foo}

We could do the rule match before listing the targets but of the
top of my head I can see a couple of issues with this approach:

1. If we match the default target, then you may not see targets
   that are not built by default, for example:

   ./: exe{foo}: cxx{foo}
   lib{bar}: cxx{bar}

   This will give you the following list (notice missing obje{bar}):

   exe{foo}
   lib{bar}
   obje{foo}  

   I don't think matching a rule for every declared target would
   be a good idea (see #2, but there are other issues).

2. This can be potentially slow since during rule matching we
   extract dependency information which involves preprocessing,
   auto-generated header generation, etc.

BTW, this approach (i.e, matching a rule and then printing the
targets) feels pretty similar to the dry-run mode (--dry-run|-n).
Maybe if there were a way to display output targets, it would be
close enough?


> Also, trying to build a single unit test like `b exe{foo.test}` fails
> with "unknown target", although `b` does print that target when
> building everything ("ld exe{foo.test}"). Being able to list targets
> would probably fix this problem too, unless it's a bug.

I am pretty sure it's this bug:

https://github.com/build2/build2/issues/27#issuecomment-489626362



More information about the users mailing list