Understanding Software Installation (configure, make, make install)

Every wondered what installing from source is?

This tutorial is aimed at those who have just started using Linux. Generally when users from the Windows background enter the Linux scene, they are totally stumped by the software installation method. They were used to the luxury of double clicking on a single file and getting their software installed. But now they have to type cryptic commands to do the same.

Though the installation instructions tell them what to do, they have no idea what those steps actually do. This article explains the basics of software installation. After reading it you would feel more at home when installing your next piece of software.

Generally, beginners tend to search desperately for RPMs, since installing RPMs is a simple task. But this article doesn't talk about RPMs. It deals with the software that you generally get in the zipped / tarball format.


Generally you would get Linux software in the tarball format (.tgz). This file has to be uncompressed into a directory using the tar command. If you download a new tarball by the name game.tgz, then you would have to type the following command

tar xfvz game.tgz

This would create a directory within the current directory and unzip all the files within that new directory. Once this is complete the installation instructions ask you to execute the three (now famous) commands: configure, make & make install.

Most users do this and successfully install their software. But many newbies have no idea what this really does. The rest of the article explains the meaning of those three commands.

Each piece of new software comes with a few files which are solely for the purpose of installation sake. One of them is the configure script. The user has to run the following command at the prompt


The above command makes the shell run the script named 'configure' which exists in the current directory.

The configure script basically consists of many lines which are used to check some details about the machine on which the software is going to be installed. This script checks for lots of dependencies on your system. For the particular software to work properly, it may require a lot of things to exist on your machine already.

When you run the configure script you would see a lot of output on the screen, each being some sort of question and a respective yes/no as the reply. If any of the major requirements are missing on your system, the configure script would exit and you cannot proceed with the installation until you get those required things.

The main job of the configure script is to create a 'Makefile'. This is a very important file for the installation process. Depending on the results of the tests (checks) that the configure script has performed, it would write the various steps that need to be taken (while compiling the software) in the file named Makefile.

If you get no errors and the configure script runs successfully (if there is any error the last few lines of the output would glaringly be stating the error) then you can proceed with the next command which is...


'make' is actually a utility which exists on almost all Unix systems. For the make utility to work it requires a file named Makefile in the same directory in which you run make. As we have seen, the configure script's main job was to create a file named Makefile to be used with the make utility (sometimes the Makefile is named as makefile also).

'make' would use the directions present in the Makefile and proceed with the installation. The Makefile indicates the sequence that Linux must follow to build various components / sub-programs of your software. The sequence depends on the way the software is designed as well as many other factors.

The Makefile actually has a lot of labels (names for different sections). Hence, depending on what needs to be done, the control would be passed to different sections within the Makefile. Or it is possible that, at the end of one of the section, there is a command to go to some next section.

Basically the make utility compiles all your program code and creates the executables. For a particular section of the program to complete it might require some other part of the code already ready, this is what the Makefile does. It sets the sequence for the events so that your program does not complain about missing dependencies.

One of the labels present in the Makefile happens to be named 'install'.

If 'make' ran successfully then you are almost done with the installation. Only the last step remains which is:

make install

As indicated before, make uses the file named Makefile in the same directory. When you run make without any parameters, the instruction in the Makefile begin executing from the start and as per the rules defined within the Makefile (particular sections of the code may execute after one another... thats why labels are used... to jump from one section to another). But when you run make with install as the parameter, the make utility searches for a label named install within the Makefile, and executes only that section of the Makefile.

The install section happens to be just one part where the executables and other required files created during the last step (i.e. make) are copied into the required final directories on your machine. E.g. the executable that the user runs may be copied to the /usr/local/bin so that all users are able to run the software.

Similarly, all the other files are also copied to the standard directories in Linux. Remember that when you ran make, all the executables were created in the temporary directory where you had unzipped your original tarball. So when you run make install, these executables are copied to their final directories.

That's it!

This article was originally written by Kiran Pai.

Written by Matt

I've been running web hosting servers and building websites for myself using Wordpress for 14 years. My network of sites get a TON of traffic and I use various models to monetize them - mainly display ads and affiliate marketing. Along the way I've picked up hundreds of tips and tricks that I think would be useful for anyone looking to make a website and here is where I'm going to share them. Find me on Twitter too.

One Comment

Leave a Reply
  1. My developer is trying to convince me to move to .net from PHP. I have always disliked the idea because of the costs. But he's trying none the less. I've been using WordPress on numerous websites for about a year and am concerned about switching to another platform. Any kind of help would be really appreciated!

Leave a Reply

Your email address will not be published. Required fields are marked *

How and When to Use the dd Command

Why You Should Avoid Shared Hosting and Try Nginx with WordOps