diff --git a/boost_build_v2.html b/boost_build_v2.html index 557045981..9d3356929 100644 --- a/boost_build_v2.html +++ b/boost_build_v2.html @@ -61,6 +61,9 @@

Definition

+

TODO: give a name and describe the property set joined with slashes. I + use the term "property path" somewhere below.

+

Link compatible and imcompatible properties

Definition of property refinement

@@ -183,7 +186,7 @@ project where it is used.
-
+

Source location specifies directory where sources for the @@ -269,7 +272,7 @@

Project relationship

-

There are two kinds of project relationships.

+

There are three kinds of project relationships.

First is parent-child. This relationship is established implicitly: parent directories of a project are searched, and the first found Jamfile @@ -280,22 +283,99 @@ build other projects. Those project need not be child projects. The build-project rule is used for that:

-    build-project src ;
+    build-project src ;   
+
+ +

The third kind is the 'use' relationship. In means that one project + uses targets from another. It is possible to just refer to target in + other projects using target id. However, if target id uses project id, it + is required that the project id is known. The use-project rule + is employed to guarantee that.

+
+    use-project ( id : location )
    
 
+ It loads the project at the specified location, which makes its project + id available in the project which invokes the rule. It is required that + the id parameter passed to the use-project rule be + equal to the id that the loaded project declared. At this moment, the + id paremeter should be absolute project id.

Targets

Main targets and main target alternatives

+

Main target is a named entity which can be build, for example + a named executable file. To declare a main target, user invokes some of + the main target rules, passing it things + like list of source and requirement.

+ +

It is possible to have different list of sources for different + toolsets, therefore it is possible to invoce main target rules several + times for a single main target. For example:

+
+    exe a.exe : a_gcc.cpp : <toolset> ;
+    exe a.exe : a.cpp ;
+
+ Each call to the 'exe' rule defines a new main target + alternative for the main target a.exe. In this case, the + first alternative will be used for the gcc toolset, while the + second alternative will be used in other cases. TODO: document the exact + selection method under "Build process" below. +

Target identifiers and references

-

Target identifier is used to denote a target.

+

Target identifier is used to denote a target. It is described by the + following grammar:

+
+    target-id -> project-reference local-target-name
+    project-reference -> [jamfile-location] [ "@" [project-id] ]
+    jamfile-location -> pathname 
+    project-id -> pathname
+    local-target-name -> identifier
+
+ For example, valid target ids might be: +
+    a
+    lib/b
+    @/boost/thread
+    /home/ghost/build/lr_library@parser/lalr1
+
+ To map the target id into target, the project where that target is + contained is first found: -

Target reference is used to refer to a target, and may additionally - specify desired properties for that target.

+
    +
  1. If project-reference is empty, then the current project is + used — i.e. the project there the target id occurs.
  2. -

    Simplified target reference has the same form as pathname, for example +

  3. If the project id is absolute, the project with that id is + used.
  4. + +
  5. If the project id is relative, it is treated relatively to + project-id of the project at jamfile-location. If that project + does not declare project id, it is an error.
  6. +
+ After that, the target given by local-target-name in the found + project is used. + +

Target reference is used to specify a source target, and may + additionally specify desired properties for that target. It has this + syntax:

+
+    target-reference -> target-id [ "/" requested-properties ]
+    requested-properties -> property-path
+
+ For example, +
+    exe compiler : compiler.cpp libs/cmdline/<optimization>space ;
+
+ would cause the version of cmdline library, optimized to space, + to be linked in even if the compile executable is build with + speed optimization. + +
Ambiguity resolution
+ +

Target reference may have the same form as a pathname, for example lib/a. In order to determine if this is target reference or pathname, it is checked if there's a jamfile in the specified path. If there is one, it is loaded and if the specified target is declared by diff --git a/v2/boost_build_v2.html b/v2/boost_build_v2.html index 557045981..9d3356929 100644 --- a/v2/boost_build_v2.html +++ b/v2/boost_build_v2.html @@ -61,6 +61,9 @@

Definition

+

TODO: give a name and describe the property set joined with slashes. I + use the term "property path" somewhere below.

+

Link compatible and imcompatible properties

Definition of property refinement

@@ -183,7 +186,7 @@ project where it is used.
-
+

Source location specifies directory where sources for the @@ -269,7 +272,7 @@

Project relationship

-

There are two kinds of project relationships.

+

There are three kinds of project relationships.

First is parent-child. This relationship is established implicitly: parent directories of a project are searched, and the first found Jamfile @@ -280,22 +283,99 @@ build other projects. Those project need not be child projects. The build-project rule is used for that:

-    build-project src ;
+    build-project src ;   
+
+ +

The third kind is the 'use' relationship. In means that one project + uses targets from another. It is possible to just refer to target in + other projects using target id. However, if target id uses project id, it + is required that the project id is known. The use-project rule + is employed to guarantee that.

+
+    use-project ( id : location )
    
 
+ It loads the project at the specified location, which makes its project + id available in the project which invokes the rule. It is required that + the id parameter passed to the use-project rule be + equal to the id that the loaded project declared. At this moment, the + id paremeter should be absolute project id.

Targets

Main targets and main target alternatives

+

Main target is a named entity which can be build, for example + a named executable file. To declare a main target, user invokes some of + the main target rules, passing it things + like list of source and requirement.

+ +

It is possible to have different list of sources for different + toolsets, therefore it is possible to invoce main target rules several + times for a single main target. For example:

+
+    exe a.exe : a_gcc.cpp : <toolset> ;
+    exe a.exe : a.cpp ;
+
+ Each call to the 'exe' rule defines a new main target + alternative for the main target a.exe. In this case, the + first alternative will be used for the gcc toolset, while the + second alternative will be used in other cases. TODO: document the exact + selection method under "Build process" below. +

Target identifiers and references

-

Target identifier is used to denote a target.

+

Target identifier is used to denote a target. It is described by the + following grammar:

+
+    target-id -> project-reference local-target-name
+    project-reference -> [jamfile-location] [ "@" [project-id] ]
+    jamfile-location -> pathname 
+    project-id -> pathname
+    local-target-name -> identifier
+
+ For example, valid target ids might be: +
+    a
+    lib/b
+    @/boost/thread
+    /home/ghost/build/lr_library@parser/lalr1
+
+ To map the target id into target, the project where that target is + contained is first found: -

Target reference is used to refer to a target, and may additionally - specify desired properties for that target.

+
    +
  1. If project-reference is empty, then the current project is + used — i.e. the project there the target id occurs.
  2. -

    Simplified target reference has the same form as pathname, for example +

  3. If the project id is absolute, the project with that id is + used.
  4. + +
  5. If the project id is relative, it is treated relatively to + project-id of the project at jamfile-location. If that project + does not declare project id, it is an error.
  6. +
+ After that, the target given by local-target-name in the found + project is used. + +

Target reference is used to specify a source target, and may + additionally specify desired properties for that target. It has this + syntax:

+
+    target-reference -> target-id [ "/" requested-properties ]
+    requested-properties -> property-path
+
+ For example, +
+    exe compiler : compiler.cpp libs/cmdline/<optimization>space ;
+
+ would cause the version of cmdline library, optimized to space, + to be linked in even if the compile executable is build with + speed optimization. + +
Ambiguity resolution
+ +

Target reference may have the same form as a pathname, for example lib/a. In order to determine if this is target reference or pathname, it is checked if there's a jamfile in the specified path. If there is one, it is loaded and if the specified target is declared by