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

[[make-tips]]
=== 'make' tips

This is a collection of tips that help you make the most of Buildroot.

.Display all commands executed by make:

--------------------
 $ make V=1 <target>
--------------------

.Display the list of boards with a defconfig:

--------------------
 $ make list-defconfigs
--------------------

.Display all available targets:

--------------------
 $ make help
--------------------

Not all targets are always available,
some settings in the +.config+ file may hide some targets:

* +busybox-menuconfig+ only works when +busybox+ is enabled;
* +linux-menuconfig+ and +linux-savedefconfig+ only work when
  +linux+ is enabled;
* +uclibc-menuconfig+ is only available when the uClibc C library is
  selected in the internal toolchain backend;
* +barebox-menuconfig+ and +barebox-savedefconfig+ only work when the
  +barebox+ bootloader is enabled.
* +uboot-menuconfig+ and +uboot-savedefconfig+ only work when the
  +U-Boot+ bootloader is enabled.

.Cleaning:

Explicit cleaning is required when any of the architecture or toolchain
configuration options are changed.

To delete all build products (including build directories, host, staging
and target trees, the images and the toolchain):

--------------------
 $ make clean
--------------------

.Generating the manual:

The present manual sources are located in the 'docs/manual' directory.
To generate the manual:

---------------------------------
 $ make manual-clean
 $ make manual
---------------------------------

The manual outputs will be generated in 'output/docs/manual'.

.Notes
- A few tools are required to build the documentation (see:
  xref:requirement-optional[]).

.Resetting Buildroot for a new target:

To delete all build products as well as the configuration:

--------------------
 $ make distclean
--------------------

.Notes
If +ccache+ is enabled, running +make clean+ or +distclean+ does
not empty the compiler cache used by Buildroot. To delete it, refer
to xref:ccache[].
