// -*- 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[].

.Dumping the internal make variables:

One can dump the variables known to make, along with their values:

----
 $ make -s printvars VARS='VARIABLE1 VARIABLE2'
 VARIABLE1=value_of_variable
 VARIABLE2=value_of_variable
----

It is possible to tweak the output using some variables:

- +VARS+ will limit the listing to variables which names match the
  specified make-patterns - this must be set else nothing is printed
- +QUOTED_VARS+, if set to +YES+, will single-quote the value
- +RAW_VARS+, if set to +YES+, will print the unexpanded value

For example:

----
 $ make -s printvars VARS=BUSYBOX_%DEPENDENCIES
 BUSYBOX_DEPENDENCIES=skeleton toolchain
 BUSYBOX_FINAL_ALL_DEPENDENCIES=skeleton toolchain
 BUSYBOX_FINAL_DEPENDENCIES=skeleton toolchain
 BUSYBOX_FINAL_PATCH_DEPENDENCIES=
 BUSYBOX_RDEPENDENCIES=ncurses util-linux
----

----
 $ make -s printvars VARS=BUSYBOX_%DEPENDENCIES QUOTED_VARS=YES
 BUSYBOX_DEPENDENCIES='skeleton toolchain'
 BUSYBOX_FINAL_ALL_DEPENDENCIES='skeleton toolchain'
 BUSYBOX_FINAL_DEPENDENCIES='skeleton toolchain'
 BUSYBOX_FINAL_PATCH_DEPENDENCIES=''
 BUSYBOX_RDEPENDENCIES='ncurses util-linux'
----

----
 $ make -s printvars VARS=BUSYBOX_%DEPENDENCIES RAW_VARS=YES
 BUSYBOX_DEPENDENCIES=skeleton toolchain
 BUSYBOX_FINAL_ALL_DEPENDENCIES=$(sort $(BUSYBOX_FINAL_DEPENDENCIES) $(BUSYBOX_FINAL_PATCH_DEPENDENCIES))
 BUSYBOX_FINAL_DEPENDENCIES=$(sort $(BUSYBOX_DEPENDENCIES))
 BUSYBOX_FINAL_PATCH_DEPENDENCIES=$(sort $(BUSYBOX_PATCH_DEPENDENCIES))
 BUSYBOX_RDEPENDENCIES=ncurses util-linux
----

The output of quoted variables can be reused in shell scripts, for example:

----
 $ eval $(make -s printvars VARS=BUSYBOX_DEPENDENCIES QUOTED_VARS=YES)
 $ echo $BUSYBOX_DEPENDENCIES
 skeleton toolchain
----
