Remove references to build operation in the user guide
This commit is contained in:
parent
df120af953
commit
3914dd896c
@ -15,12 +15,12 @@ It supports the following features:
|
|||||||
|
|
||||||
At its core, Rscons is mainly an engine to:
|
At its core, Rscons is mainly an engine to:
|
||||||
|
|
||||||
* determine the proper order to perform build operations,
|
* determine the proper order to perform build steps,
|
||||||
* determine whether each build target is up to date or in need of rebuild, and
|
* determine whether each build target is up to date or in need of rebuild, and
|
||||||
* schedule those build operations across multiple threads as efficiently as possible.
|
* schedule those build steps across multiple threads as efficiently as possible.
|
||||||
|
|
||||||
Along the way, Rscons provides a concise syntax for specifying common types of
|
Along the way, Rscons provides a concise syntax for specifying common types of
|
||||||
build operations, but also provides an extensible framework for performing
|
build steps, but also provides an extensible framework for performing
|
||||||
custom build operations as well.
|
custom build operations as well.
|
||||||
|
|
||||||
Rscons takes inspiration from:
|
Rscons takes inspiration from:
|
||||||
@ -48,8 +48,8 @@ ${/remove}
|
|||||||
### Build Correctness
|
### Build Correctness
|
||||||
|
|
||||||
The number one design principle in Rscons is build correctness.
|
The number one design principle in Rscons is build correctness.
|
||||||
This means that a build operation will be performed when Rscons cannot
|
This means that a target will be built when Rscons cannot determine that a
|
||||||
determine that a build target is already up-to-date.
|
build target is already up-to-date.
|
||||||
A build target will be built whenever:
|
A build target will be built whenever:
|
||||||
|
|
||||||
* the target file has been removed or changed since it was last built
|
* the target file has been removed or changed since it was last built
|
||||||
@ -80,10 +80,10 @@ files coming from a particular source directory.
|
|||||||
|
|
||||||
Rscons will automatically determine the number of threads to use based on the
|
Rscons will automatically determine the number of threads to use based on the
|
||||||
host CPU configuration, and will schedule jobs as efficiently as possible
|
host CPU configuration, and will schedule jobs as efficiently as possible
|
||||||
across the available threads in order to complete the build operation in as
|
across the available threads in order to complete the build in as little time
|
||||||
little time as possible.
|
as possible.
|
||||||
As development occurs and build operations are executed, Rscons makes use of a
|
As development occurs and builders are executed, Rscons makes use of a cache
|
||||||
cache file in order to avoid rebuilding a target when it is already up to date.
|
file in order to avoid rebuilding a target when it is already up to date.
|
||||||
|
|
||||||
### Build Directory
|
### Build Directory
|
||||||
|
|
||||||
@ -130,8 +130,8 @@ The following files should be added to source control:
|
|||||||
* `rscons`
|
* `rscons`
|
||||||
* `Rsconscript`
|
* `Rsconscript`
|
||||||
|
|
||||||
Add the following contents to `.gitignore` (or the equivalent thereof for different
|
Add the following contents to `.gitignore` (or the equivalent thereof for
|
||||||
version control systems):
|
different version control systems):
|
||||||
|
|
||||||
```
|
```
|
||||||
/.rscons*
|
/.rscons*
|
||||||
@ -649,8 +649,8 @@ The command and its output are also logged to the config.log file.
|
|||||||
The [`store_merge`](../yard/Rscons/ConfigureOp.html#store_merge-instance_method),
|
The [`store_merge`](../yard/Rscons/ConfigureOp.html#store_merge-instance_method),
|
||||||
[`store_append`](../yard/Rscons/ConfigureOp.html#store_append-instance_method),
|
[`store_append`](../yard/Rscons/ConfigureOp.html#store_append-instance_method),
|
||||||
and [`store_parse`](../yard/Rscons/ConfigureOp.html#store_parse-instance_method)
|
and [`store_parse`](../yard/Rscons/ConfigureOp.html#store_parse-instance_method)
|
||||||
methods can be used to store construction variables for Environments created
|
methods can be used to store construction variables to be used in Environments
|
||||||
during the `build` operation.
|
created later.
|
||||||
Finally, the [`complete`](../yard/Rscons/ConfigureOp.html#complete-instance_method)
|
Finally, the [`complete`](../yard/Rscons/ConfigureOp.html#complete-instance_method)
|
||||||
method can be used to complete the configuration check and indicate a success
|
method can be used to complete the configuration check and indicate a success
|
||||||
or failure.
|
or failure.
|
||||||
@ -831,7 +831,7 @@ There are several default builders that are built-in to Rscons:
|
|||||||
* `Directory`, which creates a directory.
|
* `Directory`, which creates a directory.
|
||||||
* `Disassemble`, which disassembles an object file to a disassembly listing.
|
* `Disassemble`, which disassembles an object file to a disassembly listing.
|
||||||
* `Install`, which installs files or directories to a specified destination.
|
* `Install`, which installs files or directories to a specified destination.
|
||||||
* `InstallDirectory`, which creates a directory during an install operation.
|
* `InstallDirectory`, which creates a directory in an install destination.
|
||||||
* `Library`, which collects object files into a static library archive file.
|
* `Library`, which collects object files into a static library archive file.
|
||||||
* `Object`, which compiles source files to produce an object file.
|
* `Object`, which compiles source files to produce an object file.
|
||||||
* `Preprocess`, which invokes the C/C++ preprocessor on a source file.
|
* `Preprocess`, which invokes the C/C++ preprocessor on a source file.
|
||||||
@ -923,8 +923,12 @@ env.Install("${prefix}/share", "share")
|
|||||||
|
|
||||||
The `Install` builder can install files or directories to their installation
|
The `Install` builder can install files or directories to their installation
|
||||||
target location.
|
target location.
|
||||||
`Install` builders are only processed when the user has requested to perform
|
It functions almost identically to the `Copy` builder.
|
||||||
an `install` operation from the command line.
|
The only difference relates to the `clean` and `uninstall` tasks.
|
||||||
|
The `clean` task removes targets created by the `Copy` builder but not by
|
||||||
|
the `Install` builder.
|
||||||
|
The `uninstall` task removes targets created by the `Install` builder but not
|
||||||
|
by the `Copy` builder.
|
||||||
|
|
||||||
####> The InstallDirectory Builder
|
####> The InstallDirectory Builder
|
||||||
|
|
||||||
@ -934,12 +938,18 @@ env.InstallDirectory(target)
|
|||||||
env.InstallDirectory("${prefix}/share")
|
env.InstallDirectory("${prefix}/share")
|
||||||
```
|
```
|
||||||
|
|
||||||
The `InstallDirectory` builder can be used to explicitly create a directory.
|
The `InstallDirectory` builder can be used to explicitly create a directory in
|
||||||
`InstallDirectory` builders are only processed when the user has requested to
|
an installation location.
|
||||||
perform an `install` operation from the command line.
|
|
||||||
This can also disambiguate whether the target for a subsequent builder
|
This can also disambiguate whether the target for a subsequent builder
|
||||||
(e.g. `Install`) refers to a file path or directory path.
|
(e.g. `Install`) refers to a file path or directory path.
|
||||||
|
|
||||||
|
It functions almost identically to the `Directory` builder.
|
||||||
|
The only difference relates to the `clean` and `uninstall` tasks.
|
||||||
|
The `clean` task removes targets created by the `Directory` builder but not by
|
||||||
|
the `InstallDirectory` builder.
|
||||||
|
The `uninstall` task removes targets created by the `InstallDirectory` builder
|
||||||
|
but not by the `Directory` builder.
|
||||||
|
|
||||||
####> The Library Builder
|
####> The Library Builder
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
@ -1133,7 +1143,7 @@ This example script would compile all C sources under the `src` directory with
|
|||||||
the `-Wall` flag except for sources under the `src/tests` directory.
|
the `-Wall` flag except for sources under the `src/tests` directory.
|
||||||
|
|
||||||
A post-build hook can be added with `env.add_post_build_hook`.
|
A post-build hook can be added with `env.add_post_build_hook`.
|
||||||
Post-build hooks are only invoked if the build operation was a success.
|
Post-build hooks are only invoked if the build step was a success.
|
||||||
|
|
||||||
Build hooks and post-build hooks can register new build targets.
|
Build hooks and post-build hooks can register new build targets.
|
||||||
|
|
||||||
@ -1248,10 +1258,10 @@ environment variable.
|
|||||||
|
|
||||||
The
|
The
|
||||||
[`rscons`](../yard/Rscons/Script/GlobalDsl.html#rscons-instance_method)
|
[`rscons`](../yard/Rscons/Script/GlobalDsl.html#rscons-instance_method)
|
||||||
build script method can be used to invoke an rscons subprocess to
|
build script method can be used to invoke an rscons subprocess using a
|
||||||
perform an operation using a subsidiary rscons build script.
|
subsidiary rscons build script.
|
||||||
This can be used, for example, when a subproject is imported and a top-level
|
This can be used, for example, when a subproject is imported and a top-level
|
||||||
`configure` or `build` operation should also perform the same operation in the
|
`configure` or `build` task should also perform the same task in the
|
||||||
subproject directory.
|
subproject directory.
|
||||||
|
|
||||||
The first argument to the `rscons` method specifies either a directory name, or
|
The first argument to the `rscons` method specifies either a directory name, or
|
||||||
@ -1273,7 +1283,7 @@ task "build" do
|
|||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
It is also perfectly valid to perform a different operation in the subsidiary
|
It is also perfectly valid to perform different task(s) in the subsidiary
|
||||||
script from the one being performed in the top-level script.
|
script from the one being performed in the top-level script.
|
||||||
For example, in a project that requires a particular cross compiler, the
|
For example, in a project that requires a particular cross compiler, the
|
||||||
top-level `configure` script could build the necessary cross compiler using a
|
top-level `configure` script could build the necessary cross compiler using a
|
||||||
@ -1445,13 +1455,13 @@ The base constructor will set several instance attributes within the builder:
|
|||||||
* `@env` will contain a reference to the Environment object that registered
|
* `@env` will contain a reference to the Environment object that registered
|
||||||
the build target using the builder
|
the build target using the builder
|
||||||
* `@vars` will contain any user-specified construction variable values that
|
* `@vars` will contain any user-specified construction variable values that
|
||||||
should be used for the build operation (overriding any Environment-wide
|
should be used for the builder execution (overriding any Environment-wide
|
||||||
construction variable values)
|
construction variable values)
|
||||||
|
|
||||||
####> Custom Builder Operation
|
####> Custom Builder Operation
|
||||||
|
|
||||||
In order for a builder to perform a build operation, the builder class must
|
In order for a builder to run, the builder class must implement a the
|
||||||
implement a the `Builder#run()` method.
|
`Builder#run()` method.
|
||||||
Generally, the `run()` method will use the source file(s) to produce the target
|
Generally, the `run()` method will use the source file(s) to produce the target
|
||||||
file.
|
file.
|
||||||
Here is an example of a trivial builder:
|
Here is an example of a trivial builder:
|
||||||
@ -1469,16 +1479,15 @@ end
|
|||||||
|
|
||||||
##### Return Value
|
##### Return Value
|
||||||
|
|
||||||
If the build operation has completed and failed, the `run` method should return
|
If the builder has completed and failed, the `run` method should return
|
||||||
`false`.
|
`false`.
|
||||||
In this case, generally the command executed or the builder itself would be
|
In this case, generally the command executed or the builder itself would be
|
||||||
expected to output something to `$stderr` indicating the reason for the build
|
expected to output something to `$stderr` indicating the reason for the build
|
||||||
failure.
|
failure.
|
||||||
If the build operation has completed successfully, the `run` method should
|
If the builder has completed successfully, the `run` method should
|
||||||
return `true`.
|
return `true`.
|
||||||
If the build operation is not yet complete and is waiting on other operations,
|
If the builder is not yet complete and is waiting on other steps, the `run`
|
||||||
the `run` method should return the return value from the `Builder#wait_for`
|
method should return the return value from the `Builder#wait_for` method.
|
||||||
method.
|
|
||||||
See ${#Custom Builder Parallelization}.
|
See ${#Custom Builder Parallelization}.
|
||||||
|
|
||||||
##### Printing Build Status
|
##### Printing Build Status
|
||||||
@ -1552,9 +1561,9 @@ In any of these cases, the builder's `run` method should make use of
|
|||||||
`Builder#wait_for` to "sleep" until one of the items being waited for has
|
`Builder#wait_for` to "sleep" until one of the items being waited for has
|
||||||
completed.
|
completed.
|
||||||
|
|
||||||
###### Using a Ruby Thread to Parallelize a Build Operation
|
###### Using a Ruby Thread to Parallelize a Builder
|
||||||
|
|
||||||
Here is an example of using a Ruby thread to parallelize a build operation:
|
Here is an example of using a Ruby thread to parallelize a builder:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
${include build_tests/custom_builder/wait_for_thread.rb}
|
${include build_tests/custom_builder/wait_for_thread.rb}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user