blob: 38e14607dfbf591c4fdd7eea97132a61ff18329d [file] [log] [blame]
---
layout: documentation
title: Command-Line Reference
---
<h1>Command-Line Reference</h1>
<pre>
bazel [&lt;startup options&gt;] &lt;command&gt; [&lt;args&gt;]
</pre>
or
<pre>
bazel [&lt;startup options&gt;] &lt;command&gt; [&lt;args&gt;] -- [&lt;target patterns&gt;]
</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>
--&lt;option&gt;=&lt;value&gt;
--&lt;option&gt; &lt;value&gt;
</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>
-&lt;short_form&gt; &lt;value&gt;
</pre>
</p>
<p>
Boolean options can be enabled as follows:
<pre>
--&lt;option&gt;
--&lt;option&gt;=[true|yes|1]
</pre>
and disabled as follows:
<pre>
--no&lt;option&gt;
--&lt;option&gt;=[false|no|0]
</pre>
</p>
<p>
Tristate options are usually set to automatic by default, and can be
force-enabled as follows:
<pre>
--&lt;option&gt;=[true|yes|1]
</pre>
or force-disabled as follows:
<pre>
--no&lt;option&gt;
--&lt;option&gt;=[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>