Boost logo

Boost-Build :

Subject: [Boost-build] Projects requirements and alternative selection
From: Johan Nilsson (r.johan.nilsson_at_[hidden])
Date: 2009-04-15 08:38:28


Hi,

I'm experiencing some "problems" with target selection. A simplified
example:

-------------------- Jamroot ------------------
project foo
 : requirements
 <link>static
 <threading>multi
 <runtime-link>shared

 : default-build
 debug

 ;

# release
lib bar
 :
 : <file>a.lib <threading>multi <link>static <runtime-link>shared
<variant>release
 ;

# debug
lib bar
 :
 : <file>a_d.lib <threading>multi <link>static <runtime-link>shared
<variant>debug
 ;
------------------ Build output -----------------------
>bjam
error: No best alternative for ./bar
    next alternative: required properties: <link>static <runtime-link>shared
<threading>multi <variant>release
        not matched
    next alternative: required properties: <link>static <runtime-link>shared
<threading>multi <variant>debug
        not matched
...found 1 target...
----------------------------------------------------

Note that if I declare e.g. an exe target that references the 'bar' lib, the
correct library is selected and linked with, but the above error messages
still appear (build is not aborted). What seems to be the culprit is that
threading defaults to "single" and link to "static" and that this is added
to the build request. This is the output from some tracing added to
select-alternatives in targets.jam:

Original: <debug-symbols>on
<inlining>off
<optimization>off
<runtime-debugging>on
<variant>debug

With defaults: <asynch-exceptions>off
<debug-store>object
<debug-symbols>on
<embed-manifest>on
<exception-handling>on
<extern-c-nothrow>off
<hardcode-dll-paths>true
<host-os>windows
<inlining>off
<install-dependencies>off
<link>shared
<midl-robust>yes
<midl-stubless-proxy>yes
<optimization>off
<os>NT
<pch>on
<profiling>off
<rtti>on
<runtime-debugging>on
<runtime-link>shared
<stdlib>native
<suppress-import-lib>false
<symlink-location>project-relative
<target-os>windows
<threading>single
<toolset-msvc:version>8.0
<toolset>msvc
<user-interface>console
<variant>debug
<warnings-as-errors>off
<warnings>on

Is this as expected - I had a gut feeling that the requirements set by
"project" should be added to the "build" request for the bar lib in the
above scenario?

I've tried the above using Boost.Build from trunk as well as from 1.34.1.
Toolset is msvc (set in user-config.jam).

Thanks / Johan


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