Debugging with GDB

Node:Separate Objdir, Next:Config Names, Up:Installing GDB

### 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 5.2.1, you can build GDB in a separate directory for a Sun 4 like this:

         cd gdb-5.2.1
         mkdir ../gdb-sun4
         cd ../gdb-sun4
         ../gdb-5.2.1/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`.

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-5.2.1` (or in a separate configured directory configured with `--srcdir=`dirname`/gdb-5.2.1`), 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.