### C.3 Compiling gdb in Another Directory

If you want to run gdb versions for several host or target machines, you need a different `gdb` compiled for each combination of host and target. `configure` is designed to make this easy by allowing you to generate each configuration in a separate subdirectory, rather than in the source directory. If your `make` program handles the ‘`VPATH`’ feature (gnu `make` does), running `make` in each of these directories builds the `gdb` program specified there.

To build `gdb` in a separate directory, run `configure` with the ‘`--srcdir`’ option to specify where to find the source. (You also need to specify a path to find `configure` itself from your working directory. If the path to `configure` would be the same as the argument to ‘`--srcdir`’, you can leave out the ‘`--srcdir`’ option; it is assumed.)

For example, with version 7.6-2013.05, you can build gdb in a separate directory for a Sun 4 like this:

         cd gdb-linaro-7.6-2013.05
         mkdir ../gdb-sun4
         cd ../gdb-sun4
         ../gdb-linaro-7.6-2013.05/configure sun4
         make

When `configure` builds a configuration using a remote source directory, it creates a tree for the binaries with the same structure (and using the same names) as the tree under the source directory. In the example, you'd find the Sun 4 library `libiberty.a` in the directory `gdb-sun4/libiberty`, and gdb itself in `gdb-sun4/gdb`.

Make sure that your path to the `configure` script has just one instance of `gdb` in it. If your path to `configure` looks like `../gdb-linaro-7.6-2013.05/gdb/configure`, you are configuring only one subdirectory of gdb, not the whole package. This leads to build errors about missing include files such as `bfd/bfd.h`.

One popular reason to build several gdb configurations in separate directories is to configure gdb for cross-compiling (where gdb runs on one machine—the host—while debugging programs that run on another machine—the target). You specify a cross-debugging target by giving the ‘`--target=target`’ option to `configure`.

When you run `make` to build a program or library, you must run it in a configured directory—whatever directory you were in when you called `configure` (or one of its subdirectories).

The `Makefile` that `configure` generates in each source directory also runs recursively. If you type `make` in a source directory such as `gdb-linaro-7.6-2013.05` (or in a separate configured directory configured with ‘`--srcdir=dirname/gdb-linaro-7.6-2013.05`’), you will build all the required libraries, and then build GDB.

When you have multiple hosts or targets configured in separate directories, you can run `make` on them in parallel (for example, if they are NFS-mounted on each of the hosts); they will not interfere with each other.