--- 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>
    --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>
    --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.