make.conf is one of the ways to customize the Portage environment on a global level. This configuration will apply to every package that is emerged, and controls many elements of Portage's functionality, such as global USE flags, language options, Portage mirrors, and so on.
An example setup can be found at /usr/share/portage/config/make.conf.example.
Portage configuration is not limited to make.conf, global settings defined in this file are refined on a per-package basis in the /etc/portage/package.* files, as well as the local environment.
make.conf may exist as /etc/portage/make.conf or /etc/make.conf (or both), with the settings from /etc/portage/make.conf taking precedence.
There are many possible variables to customize in make.conf, but only the most commonly used are explained in detail here. For more information, and the full list of variables, consult the make.conf man page.
This variable is passed through the configure step of ebuilds to set the build-host of the system. See the CHOST article.
CFLAGS / CXXFLAGS
These flags are given when C/C++ packages are compiled to modify the behavior of the compiler. Not all packages will utilize these variables, as some programs require a specific set of compilation flags to compile.
While setting proper CFLAGS can increase the speed and stability of the system, absurd settings (e.g. -O3 -fast-math -funroll-all-loops) will more likely leave you with a crippled system than a blazing fast one.
This variable defines a list of Gentoo mirrors to check before downloading from the source defined in the ebuild. Properly chosen mirrors will generally be able to offer faster download speeds. Try using Mirrorselect to find the fastest mirror server.
This variable is used to specify arguments passed to make when packages are built from source. Make can be told to run multiple jobs in parallel (a potentially substantial speed increase, depending on processor). This can be done either through '--jobs #' (short form: '-j#'), which runs '#' jobs at a time (without an argument, '-j' will flood the processor with as many jobs as possible, and is not recommended). Another option is '--load-average #' (short form '-l#'), which will have make keep the load average of the system to '#', however many parallel tasks that ends up being.
Defines the location of the Portage tree. Defaults to /usr/portage.
Defines locations of local Portage overlays. Ebuilds included in the listed overlays will be installable as usual through emerge.
To use layman overlays, the following should be included in make.conf:
The USE variable allows the setting of a common set of USE flags for all packages. These are flags for a common set of package functionality desired (such as X11 or PulseAudio capability), or system capabilities, like SSE or MMX instruction support.
Don't set package-specific USE flags here, those should be set instead in /etc/portage/package.use.
For a list of the available global USE flags to be set in make.conf, see http://www.gentoo.org/dyn/use-index.xml and /usr/portage/profiles/use.desc.