// -*- mode:doc; -*-
// vim: set syntax=asciidoc:

[[pkg-build-steps]]

==== Package-specific _make_ targets

Running +make <package>+ builds and installs that particular package
and its dependencies.

For packages relying on the Buildroot infrastructure, there are
numerous special make targets that can be called independently like
this:

------------
make <package>-<target>
------------

The package build targets are (in the order they are executed):

[width="90%",cols="^1,4",options="header"]
|===================================================
| command/target    | Description

| +source+          | Fetch the source (download the tarball, clone
the source repository, etc)

| +depends+         | Build and install all dependencies required to
build the package

| +extract+         | Put the source in the package build directory
(extract the tarball, copy the source, etc)

| +patch+           | Apply the patches, if any

| +configure+       | Run the configure commands, if any

| +build+           | Run the compilation commands

| +install-staging+ |
*target package:* Run the installation of the package in the
staging directory, if necessary

| +install-target+  |
*target package:* Run the installation of the package in the
target directory, if necessary

| +install+         |
*target package:* Run the 2 previous installation commands

*host package:* Run the installation of the package in the host
directory

|===================================================

Additionally, there are some other useful make targets:

[width="90%",cols="^1,4",options="header"]
|===================================================
| command/target    | Description

| +show-depends+    | Displays the first-order dependencies required to build the
package

| +show-recursive-depends+ | Recursively displays the dependencies
  required to build the package

| +show-rdepends+   | Displays the first-order reverse dependencies of
  the package (i.e packages that directly depend on it)

| +show-recursive-rdepends+ | Recursively displays the reverse
  dependencies of the package (i.e the packages that depend on it,
  directly or indirectly)

| +graph-depends+   | Generate a dependency graph of the package, in the
context of the current Buildroot configuration. See
xref:graph-depends[this section] for more details about dependency
graphs.

| +graph-rdepends+  | Generate a graph of this package reverse
  dependencies (i.e the packages that depend on it, directly or
  indirectly)

| +dirclean+        | Remove the whole package build directory

| +reinstall+       | Re-run the install commands

| +rebuild+         | Re-run the compilation commands - this only makes
sense when using the +OVERRIDE_SRCDIR+ feature or when you modified a file
directly in the build directory

| +reconfigure+     | Re-run the configure commands, then rebuild - this only
makes sense when using the +OVERRIDE_SRCDIR+ feature or when you modified a
file directly in the build directory

|===================================================
