Subject: Re: [boost] How to specify Boost headers location properly
From: Vladimir Prus (ghost_at_[hidden])
Date: 2010-03-11 01:16:01
Mateusz Loskot wrote:
> Steven Watanabe wrote:
>> Mateusz Loskot wrote:
>>> For 1st example for the case 1),
>>> in trunk/libs/accumulators/example/Jamfile.v2, Boost headers are
>>> located by relative path and mysterious $(BOOST_ROOT)
>>> exe example
>> <include>$(BOOST_ROOT) can be replaced with <dependency>/boost//headers
> Yet another option I've just learned, but...
> What is the difference between using headers-only library by specifying
> this requirement using <source> and <dependency>?
> The manual says:
> "(...)a dependency on the target (...) (so it will be brought up-to-date
> whenever the target being declared is). The dependency is not used in
> any other way."
> What does bringing up-to-date mean for headers-only?
> Also, the "not used in any other way" suggests to me that it does not
> implicitly update <include> directories.
Actually, for /boost//headers there's no difference between <source>
and <dependency>. Every single metatarget in Boost.Build, when built,
produces two things:
- actual targets (corresponding to files)
- set of properties that must be propagated to dependents. These
are known as usage requirements.
Now, there are three predefined build properties:
1. <source> tries to consume the produced targets, and adds usage requirements.
2. <dependency> sets a dependency on the produced targets, and also adds
3. <use> only sets usage requirements
Now, because the 'headers' metatarget never produces any real file, only
usage requirements, all three are exactly the same.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk