<code>make menuconfig</code> is one of five similar tools that can assist a user in configuring the Linux kernel before building, a necessary step needed to compile the source code. <code>make menuconfig</code>, with a menu-driven user interface, allows the user to choose which features and modules to compile. It is normally invoked using the command <code>make menuconfig</code>; menuconfig is a target in the Linux Makefile.
<code>make menuconfig</code> was not in the first version of Linux. Prior to 2.5.45, the predecessor tool used Configuration Menu Language (CML) and was a question-and-answer-based utility (<code>make config</code>, <code>make oldconfig</code>).
Variations of the tool for Linux configuration include:
All these tools use the Kconfig language internally. Kconfig is also used in other projects, such as Das U-Boot, a bootloader for embedded devices, Buildroot, a tool for generating embedded Linux systems, and BusyBox, a single-executable shell utility toolbox for embedded systems.
Despite being a simple design, <code>make menuconfig</code> offers considerable advantages to the question-and-answer-based configuration tool <code>make config</code>, the most notable being a basic search system and the ability to load and save files with filenames different from "<code>.config</code>". <code>make menuconfig</code> allows navigation forwards or backwards directly between features, rather than <code>make config</code>'s approach of listing every single option one by one, which requires pressing the key repeatedly to view all options.
If the user is satisfied with a previous <code>.config</code> file, using <code>make oldconfig</code> uses this previous file to answer all questions that it can, only interactively presenting the new features. This is intended for a version upgrade, but may be appropriate at other times.
<code>make menuconfig</code> is a light load on system resources unlike <code>make xconfig</code> (uses Qt as of version 2.6.31.1, formerly Tk) or <code>make gconfig</code>, which utilizes GTK+. Instead of editing the <code>.config</code> by hand, <code>make menuconfig</code> shows the descriptions of each feature (by pressing the "Help" button while on a menu option), and adds some (primitive in version 2.6.31.1) dependency checking.
The help information is distributed throughout the kernel source tree in the various files called Kconfig.
To use <code>make menuconfig</code>, Linux source is a requirement, a make tool, a C compiler, and the ncurses library.