---
layout: documentation
title: Getting Started
---

# Getting Started with Bazel

## Setup

Use the [installation instructions](install.html) to install a copy of
Bazel on your machine.

## Using a Workspace

All Bazel builds take place in a [_workspace_](build-ref.html#workspaces),
a directory on your filesystem that contains source code for the software you
want to build, as well as symbolic links to directories that contain the build
outputs (for example, `bazel-bin` and `bazel-out`). The location of the
workspace directory is not significant, but it must contain a file called
`WORKSPACE` in the top-level directory; an empty file is a valid workspace.
The `WORKSPACE` file can be used to reference
[external dependencies](external.html) required to build the outputs.
One workspace can be shared among multiple projects if desired.

```bash
touch WORKSPACE
```

## Creating a Build File

To know which targets can be built in your project, Bazel inspects `BUILD`
files. They are written in Bazel's build language which is syntactically
similar to Python. Usually they are just a sequence of declarations of rules.
Each rule specifies its inputs, outputs, and a way to compute the outputs from
the inputs.

The rule probably most familiar to people who have used `Makefile`s before (as
it is the only rule available there) is the
[genrule](be/general.html#genrule), which specifies how the output can
be generated by invoking a shell command.

```
genrule(
  name = "hello",
  outs = ["hello_world.txt"],
  cmd = "echo Hello World > $@",
)
```

The shell command may contain [Make variables](be/make-variables.html).

Using the above `BUILD` file, you can ask Bazel to generate the target.

```
$ bazel build :hello
.
INFO: Found 1 target...
Target //:hello up-to-date:
  bazel-genfiles/hello_world.txt
INFO: Elapsed time: 2.255s, Critical Path: 0.07s
```

We note two things. First, targets are normally referred to by their
[label](build-ref.html#labels), which is specified by the
[name](be/general.html#genrule.name) attribute of the rule. (Referencing
them by the output file name is also possible, but this is not the preferred
way.) Second, Bazel puts the generated files into a separate directory (the
`bazel-genfiles` directory is actually a symbolic link) so as not to pollute
your source tree.

Rules may use the output of other rules as input, as in the following
example. Again, the generated sources are referred to by their label.

```
genrule(
  name = "hello",
  outs = ["hello_world.txt"],
  cmd = "echo Hello World > $@",
)

genrule(
  name = "double",
  srcs = [":hello"],
  outs = ["double_hello.txt"],
  cmd = "cat $< $< > $@",
)
```

Finally, note that, while the [genrule](be/general.html#genrule) might
seem familiar, it usually is _not_ the best rule to use. It is preferrable to
use one of the specialized [rules](be/overview.html#rules) for various
languages.

# Next Steps

Next, check out the tutorial on building [Java](tutorial/java.html)
or [C++](tutorial/cpp.html) programs.
