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

[source,jam]
----
class project-target : abstract-target {
    rule generate ( property-set )
    rule build-dir ( )
    rule main-target ( name )
    rule has-main-target ( name )
    rule find ( id : no-error ? )

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

This class has the following responsibilities:

* Maintaining a list of main targets in this project and building them.

--
1. [[b2.reference.class.project-target.generate]] `rule generate ( property-set )`
+
Overrides
link:#b2.reference.class.abstract-target.generate[abstract-target.generate].
Generates virtual targets for all the targets contained in this project.
+
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.

2. `rule build-dir ( )`
+
Returns the root build directory of the project.

3. `rule main-target ( name )`
+
Returns a link:#b2.reference.class.main-target[main-target] class
instance corresponding to `name`. Can only be called after the project
has been fully loaded.

4. `rule has-main-target ( name )`
+
Returns whether a link:#b2.reference.class.main-target[main-target]
with the specified name exists. Can only be called after the project has
been fully loaded.

5. `rule find ( id : no-error ? )`
+
Find and return the target with the specified id, treated relative to
self. Id may specify either a target or a file name with the target
taking priority. May report an error or return nothing if the target is
not found depending on the `no-error` parameter.
--
