`build` - Compile the software of a project and prepare it for use

        build <project path> <target name>…

    - The working directory must be the command directory.
        : see `^*working directory$` @ `^*shell commands$` @
          http://reluk.ca/project/Java/editorial_guidelines.brec
    - Two or more positional arguments are required:

        <project path>
            / The proper path of the project: the relative file path that identifies it universally.
               E.g. for the present project, use `Makeshift` or `Makeshift/`.
                : see `^*proper path$` @ http://reluk.ca/project/glossary.brec
            - Tells which project to build.

        <target name>…
            / The name or names of one or more build targets, each proper to the project.
            - Tells which target or targets of the project to build.
                / A project’s targets are declared in a source file conventionally named
                  either `BuildTarget.java` or `builder/Target.java`.
                    : see e.g. ../template/BuildTarget.java
            - Letter case is insignificant.
            - Characters ‘-’ and ‘_’ are taken as equivalent.
            - Abbreviation is allowed: a viable name is any substring that identifies
              the target precisely, appearing in the name of no other target.


    ━━━━━━━━━━━━━━━━━━━
     Scripting a build ─ How a project defines its builder
    ───────────────────
        - For the common case of a Java project with a single package,
          typically all you need is `BuildTarget.java`.
            : see ../example/mixed_top/
        >+ cd <command directory>
        >+ cp Makeshift/template/BuildTarget.java <project>/
        + Edit your `BuildTarget.java`.
            + Correct the package name.
            + Delete the name of any target inapplicable to your project.
        if( you need to customize the builds further )
            / E.g. you have subpackages, or a build target unsupported by the default builder.
            + Code your own `Builder.java`.
                : see `a project may define its own builder` @ ../Builder.java
                : see ../example/
                - Typically you would subclass the default builder, overriding a method or two.
                    : re `default builder` see ../BuilderDefault.java


    ━━━━━━━━━━
     Examples
    ──────────
        - A simple build, requiring no other project to be installed,
          is the `builder` target of the present project.

              build Makeshift builder

        - A more typical form of build is:

              build Breccia/Web/imager Java_class_files

        - Convenient equivalents of the above command are:

              build Breccia/Web/imager java_class_files
             
              build Breccia/Web/imager java-class-files
             
              build Breccia/Web/imager cl

            : see `^*- Letter case is insignificant`
            : see `^*- Characters ‘-’ and ‘_’ are taken as equivalent`
            : see `^*- Abbreviation is allowed`


    ━━━━━━━━━━
     See also
    ──────────
        • `clean`
            : see clean.brec


                                                    \ Copyright © 2020-2022  Michael Allan.  Licence MIT.