--- layout: documentation title: Command-Line Reference ---

Command-Line Reference

bazel [<startup options>] <command> [<args>]
or
bazel [<startup options>] <command> [<args>] -- [<target patterns>]

Option Syntax

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:

--<option>=<value>
--<option> <value>
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.
-<short_form> <value>

Boolean options can be enabled as follows:

--<option>
--<option>=[true|yes|1]
and disabled as follows:
--no<option>
--<option>=[false|no|0]

Tristate options are usually set to automatic by default, and can be force-enabled as follows:

--<option>=[true|yes|1]
or force-disabled as follows:
--no<option>
--<option>=[false|no|0]

Target Pattern Syntax

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.

All target patterns starting with '//' are resolved relative to the current workspace.
//foo/bar:wiz Just the single target '//foo/bar:wiz'.
//foo/bar Equivalent to '//foo/bar:bar'.
//foo/bar:all All rules in the package 'foo/bar'.
//foo/... All rules in all packages beneath the directory 'foo'.
//foo/...:all All rules in all packages beneath the directory 'foo'.
//foo/...:* All targets (rules and files) in all packages beneath the directory 'foo'.
//foo/...:all-targets All targets (rules and files) in all packages beneath the directory 'foo'.

Targets with tags=["manual"] are not included in wildcard target patterns (..., :*, :all, etc). Specify such test targets with explicit labels on the command line if you want Bazel to build/test them.

Target patterns which do not begin with '//' are resolved relative to the current working directory. These examples assume a working directory of 'foo':
:foo Equivalent to '//foo:foo'.
bar:wiz Equivalent to '//foo/bar:wiz'.
bar/wiz 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.
bar:all Equivalent to '//foo/bar:all'.
:all Equivalent to '//foo:all'.
...:all Equivalent to '//foo/...:all'.
... Equivalent to '//foo/...:all'.
bar/...:all Equivalent to '//foo/bar/...:all'.

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.

In addition, Bazel does not follow symlinks when evaluating recursive target patterns in any directory that contains a file named as follows:

DONT_FOLLOW_SYMLINKS_WHEN_TRAVERSING_THIS_DIRECTORY_VIA_A_RECURSIVE_TARGET_PATTERN

Target patterns may be preceded by a single dash ('-'), in which case Bazel subtracts them from the set of targets accumulated by preceding patterns. Note that this means order matters. 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.:

bazel build -- foo/... -foo/contrib/...
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.