[[b2.reference.class.basic-target]]
= Class basic-target

[source]
----
class basic-target : abstract-target {
    rule __init__ ( name : project : sources * : requirements * : default-build * : usage-requirements * )
    rule generate ( property-set )
    rule construct ( name : source-targets * : property-set )

    # Methods inherited from abstract-target
    rule name ( )
    rule project ( )
    rule location ( )
    rule full-name ( )
}
----

Implements the most standard way of constructing main target alternative
from sources. Allows sources to be either files or other main targets
and handles generation of those dependency targets.

--
1. `rule __init__ ( name : project : sources * : requirements * : default-build * : usage-requirements * )`
+
`name`::
  The name of the target
`project`::
  The link:#b2.reference.class.project-target[project] in which the
  target is declared.

2. [[b2.reference.class.basic-target.generate]] `rule generate ( property-set )`
+
Overrides
link:#b2.reference.class.abstract-target.generate[abstract-target.generate].
Determines final build properties, generates sources, and calls
link:#b2.reference.class.basic-target.construct[construct]. This
method should not be overridden.
+
On success, returns:
+
* a property-set with the usage requirements to be applied to dependents
* a list of produced virtual targets, which may be empty.

3. [[b2.reference.class.basic-target.construct]] `rule construct ( name : source-targets * : property-set )`
+
Constructs virtual targets for this abstract target. Returns a
usage-requirements property-set and a list of virtual targets. Should be
overridden in derived classes.
--
