Boost logo

Boost-Build :

Subject: Re: [Boost-build] feature, properties, variants, and all the rest
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2017-08-02 02:41:32


AMDG

On 08/01/2017 08:24 PM, Stefan Seefeld via Boost-build wrote:
> On 29.07.2017 11:24, Steven Watanabe via Boost-build wrote:
>>
>> obj A : a.cpp : : <include>/a/path ;
>> obj B : b.cpp : [ check-target-builds A : <use>A ] ;
>> exe C : C.cpp : [ check-target-builds B : <use>B ]
>>
>> Now, when building C, it will go something like this:
>> - Building C
>> - Building B from check-target-builds
>> - Building A from check-target builds
>> - A builds successfully
>> <snip>
> You start the enumeration of steps with "building C", though there is a
> whole lot going on before that: The dependency graph needs to be
> instantiated first.

  Ah. There's a bit of ambiguity in the
terminology. "Building C" means to
generate the dependency graph. On the
other hand, "A/B builds successfully"
indicates both generating the graph and
successfully updating the targets.

> For example, to link "C" to "C.cpp" some generator
> logic needs to be invoked that may want to inspect the properties
> defined for C to figure out a set of tools able to make C from C.cpp. So
> what properties are being used by the generator logic, and how do they
> use conditionals (if at all) ?
>

  Conditionals are resolved before any generators
are invoked.

The order of evaluation for a main target is:
- Compute common properties (merge requirements and
  build request, resolve conditionals, and apply defaults.)
- Handle dependencies.
- Invoke generators with the given sources and with
  common properties + usage-requirements of dependencies.

In Christ,
Steven Watanabe


Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk