| --- | |
| layout: documentation | |
| title: Command-Line Reference | |
| --- | |
| <h1>Command-Line Reference</h1> | |
| <pre> | |
| bazel [<startup options>] <command> [<args>] | |
| </pre> | |
| or | |
| <pre> | |
| bazel [<startup options>] <command> [<args>] -- [<target patterns>] | |
| </pre> | |
| <h2>Option Syntax</h2> | |
| <p> | |
| Options can be passed to Bazel in different ways. Options that require a value | |
| can be passed with either an equals sign or a space: | |
| <pre> | |
| --<option>=<value> | |
| --<option> <value> | |
| </pre> | |
| Some options have a single character short form; in that case, the short form | |
| has to be passed with a single dash and a space. | |
| <pre> | |
| -<short_form> <value> | |
| </pre> | |
| </p> | |
| <p> | |
| Boolean options can be enabled as follows: | |
| <pre> | |
| --<option> | |
| --<option>=[true|yes|1] | |
| </pre> | |
| and disabled as follows: | |
| <pre> | |
| --no<option> | |
| --no_<option> | |
| --<option>=[false|no|0] | |
| </pre> | |
| </p> | |
| <p> | |
| Tristate options are usually set to automatic by default, and can be | |
| force-enabled as follows: | |
| <pre> | |
| --<option>=[true|yes|1] | |
| </pre> | |
| or force-disabled as follows: | |
| <pre> | |
| --no<option> | |
| --no_<option> | |
| --<option>=[false|no|0] | |
| </pre> | |
| </p> | |
| <h2>Target Pattern Syntax</h2> | |
| <p> | |
| A target pattern refers to a single or more targets, which are source files, | |
| output files, or rules specified in BUILD files. In addition to plain labels, | |
| Bazel also supports working-directory-relative labels, recursive patterns, and | |
| target subtraction. | |
| </p> | |
| <p> | |
| All target patterns starting with '//' are resolved relative to the current | |
| workspace. | |
| <table> | |
| <tr> | |
| <td><code>//foo/bar:wiz</code></td> | |
| <td>Just the single target '//foo/bar:wiz'.</td> | |
| </tr> | |
| <tr> | |
| <td><code>//foo/bar</code></td> | |
| <td>Equivalent to '//foo/bar:bar'.</td> | |
| </tr> | |
| <tr> | |
| <td><code>//foo/bar:all</code></td> | |
| <td>All rules in the package 'foo/bar'.</td> | |
| </tr> | |
| <tr> | |
| <td><code>//foo/...</code></td> | |
| <td>All rules in all packages beneath the directory 'foo'.</td> | |
| </tr> | |
| <tr> | |
| <td><code>//foo/...:all</code></td> | |
| <td>All rules in all packages beneath the directory 'foo'.</td> | |
| </tr> | |
| <tr> | |
| <td><code>//foo/...:*</code></td> | |
| <td>All targets (rules and files) in all packages beneath the directory 'foo'.</td> | |
| </tr> | |
| <tr> | |
| <td><code>//foo/...:all-targets</code></td> | |
| <td>All targets (rules and files) in all packages beneath the directory 'foo'.</td> | |
| </tr> | |
| </table> | |
| </p> | |
| <p> | |
| Targets with <code>tags=["manual"]</code> are not included in wildcard | |
| target patterns (<code>...</code>, <code>:*</code>, <code>:all</code>, etc). | |
| Specify such test targets with explicit labels on the command line if | |
| you want Bazel to build/test them. | |
| </p> | |
| <p> | |
| Target patterns which do not begin with '//' are resolved relative to the | |
| current <em>working directory</em>. These examples assume a working directory of | |
| 'foo': | |
| <table> | |
| <tr> | |
| <td><code>:foo</code></td> | |
| <td>Equivalent to '//foo:foo'.</td> | |
| </tr> | |
| <tr> | |
| <td><code>bar:wiz</code></td> | |
| <td>Equivalent to '//foo/bar:wiz'.</td> | |
| </tr> | |
| <tr> | |
| <td><code>bar/wiz</code></td> | |
| <td>Equivalent to: | |
| '//foo/bar/wiz:wiz' if foo/bar/wiz is a package, | |
| '//foo/bar:wiz' if foo/bar is a package, | |
| '//foo:bar/wiz' otherwise. | |
| </td> | |
| </tr> | |
| <tr> | |
| <td><code>bar:all</code></td> | |
| <td>Equivalent to '//foo/bar:all'.</td> | |
| </tr> | |
| <tr> | |
| <td><code>:all</code></td> | |
| <td>Equivalent to '//foo:all'.</td> | |
| </tr> | |
| <tr> | |
| <td><code>...:all</code></td> | |
| <td>Equivalent to '//foo/...:all'.</td> | |
| </tr> | |
| <tr> | |
| <td><code>...</code></td> | |
| <td>Equivalent to '//foo/...:all'.</td> | |
| </tr> | |
| <tr> | |
| <td><code>bar/...:all</code></td> | |
| <td>Equivalent to '//foo/bar/...:all'.</td> | |
| </tr> | |
| </table> | |
| </p> | |
| <p> | |
| By default, directory symlinks are followed for recursive target patterns, | |
| except those that point to under the output base, such as the convenience | |
| symlinks that are created in the root directory of the workspace. | |
| </p> | |
| <p> | |
| In addition, Bazel does not follow symlinks when evaluating recursive target | |
| patterns in any directory that contains a file named as follows: | |
| <pre> | |
| DONT_FOLLOW_SYMLINKS_WHEN_TRAVERSING_THIS_DIRECTORY_VIA_A_RECURSIVE_TARGET_PATTERN | |
| </pre> | |
| </p> | |
| <p> | |
| Target patterns may be preceded by a single dash ('<code>-</code>'), in which | |
| case Bazel subtracts them from the set of targets accumulated by preceding | |
| patterns. Note that this means <em>order matters</em>. In order to pass negative | |
| target patterns, you need to use '--' as an argument to prevent Bazel from | |
| interpreting it as an option, e.g.: | |
| <pre> | |
| bazel build -- foo/... -foo/contrib/... | |
| </pre> | |
| Note that Bazel may still build targets matched by a negative target pattern due | |
| to dependencies, and may also load the corresponding BUILD files, even if the | |
| targets are never built. | |
| </p> | |