{namespace buck.build_target}

/***/
{template .soyweb}
  {call buck.page}
    {param title: 'Build Target' /}
    {param prettify: true /}
    {param content}

A <strong>build target</strong> is a string that is used to
identify a build rule in your project.

<p>
Here is an example of a fully-qualified build target:

<pre>&#x2F/java/com/facebook/share:ui</pre>

A fully-qualified build target has three components:

<ol>
  <li>The <code>&#x2F/</code> prefix indicates that this path is
      relative to the root of your project.
  <li>The <code>java/com/facebook/share</code> component between
      the <code>&#x2F/</code> prefix and the colon (<code>:</code>) indicates
      that the build file can be found in the{sp}
      <code>java/com/facebook/share</code> directory.
  <li>The <code>ui</code> after the colon (<code>:</code>) indicates the name
      of the build rule within the build file in which it is defines.
      Build rule names must be unique within a build file.
</ol>

A relative build target can be used to reference another build target within
the same <a href="build_file.html">build file</a>. A relative build target
starts with a colon (<code>:</code>) and is followed by only the third
component (or "short name") of the fully-qualified build target. For example,
within <code>java/com/facebook/share/BUCK</code>, <code>:ui</code> can be
used to reference <code>&#x2F/java/com/facebook/share:ui</code>:

{literal}<pre class="prettyprint lang-py">
# This is in java/com/facebook/share/BUCK.
java_binary(
  name = 'ui_jar',
  deps = [
    # This would be the same as using:
    # <code>'&#x2F;/java/com/facebook/share:ui'</code>
    ':ui',
  ],
)
</pre>{/literal}

Build targets are frequently used as arguments to build rules and to
the command-line interface for Buck.

<h2>Command-line Protip</h2>

When specifying a build target on the command-line, it can be tedious to type:

<pre>buck build &#x2F;/java/com/facebook/share:share</pre>

Fortunately, Buck is loose with its parsing of build targets on the command-line (but is always
strict when parsing them in build files). Specifically, the leading <code>//</code> is optional on
the command line, so the above could be:

<pre>buck build java/com/facebook/share:share</pre>

Also, if there is a forward slash before the colon, it is ignored, so this could also be written as:

<pre>buck build java/com/facebook/share/:share</pre>

This looks odd until you realize that the red text can be produced by tab-completing the path to the
directory, which dramatically reduces how much you need to type:

<pre>buck build <span class="com">java/com/facebook/share/</span>:share</pre>

Finally, if the final path element matches the value specified after the colon, it can be omitted
from the command line:

<pre>
<span class="com"># This is treated as &#x2F;/java/com/facebook/share:share.</span><br>
buck build java/com/facebook/share/
</pre>

Note that this is even easier to tab-complete! For this reason, the name of the build rule for the
primary deliverable in a build file is often named the same thing as the parent directory so it
can be built from the command-line with less typing.

    {/param}
  {/call}
{/template}
