First of all, most linux software is disributed in the form of "tarballs", this refers to the tar.gz or tar.bz2 extension. These archives usually contain a source tree, files and directors full of the source code that makes up a program.
The example program I am going to use for this tutorial is aterm
When you are finished downloading the tarball, you need to extract it. To extract a tarball, you use this command:
tar -zxf (filename) (this command is used for files that are gziped, they usually contain a tar.gz extension)
tar -jxf (filename) (this one is used for bziped files, they end in tar.bz2)
When you run those commands it extacts the contents of the tarball into your current working directory.
So the next thing you need to do is cd into the new directory with the source tree.
Yay, now you have to read the README and the INSTALL files, these have important information you need to know for installing, they usually contain some info about what you'll need to compile the program.
Next we have to run ./configure, but first you should check ./configure --help to check if there are any options you want/don't want or if you need to specify a path to a library, etc. Piping the output to a pager like less is a good idea.
./configure --help | less
Aterm has quite a bit of options to turn on and off
Nothing that I want to change, so I just ran -
The output should look similar to that.loading cache ./config.cache
configuring for aterm 0.4.2
checking for gcc... gcc
checking whether the C compiler (gcc -march=pentium3 -O3 -pipe -fomit-frame-pointer ) works... yes
checking whether the C compiler (gcc -march=pentium3 -O3 -pipe -fomit-frame-pointer ) is a cross-compi
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking how to run the C preprocessor... gcc -E
checking for a BSD compatible install... /usr/bin/ginstall -c
checking for mv... /bin/mv
checking for rm... /bin/rm
checking for cp... /bin/cp
checking for sed... /bin/sed
checking for AIX... no
checking for POSIXized ISC... no
checking for X... libraries /usr/X11R6/lib, headers /usr/X11R6/include
checking for dnet_ntoa in -ldnet... no
checking for dnet_ntoa in -ldnet_stub... no
checking for gethostbyname... yes
checking for connect... yes
So, if ./configure goes well, the next thing you need to do is run make, this compiles the program, using the Makefile to tell it how to do things. The Makefile is created by ./configure.
When you run make you should see output like this:
gcc -DHAVE_CONFIG_H -DDEBUG_STRICT -c -I/usr/X11R6/include -I. -I.. -I. -march=pentium3 -O3 -pipe -fomit-frame-pointer command.c
When your done compiling, you need to install the program. This is traditionally done by running the command 'make install', but I prefer using checkinstall, it takes the place of make install during the compiling process. Here are some features of checkinstall:
If everything went well, you should have the program installed and ready to go.CheckInstall will create a Slackware, RPM or Debian compatible package and install it with Slackware's installpkg, "rpm -i" or Debian's "dpkg -i" as appropriate, so you can view it's contents with pkgtool ("rpm -ql" for RPM users or "dpkg -l" for Debian) or remove it with removepkg ("rpm -e"|"dpkg -r"). Aditionally, this script will leave you a copy of the installed package in the source directory so you can install it wherever you want, which is my second motivation: I don't have to compile the same software again and again every time I need to install it on another box :-).
I hope this tutorial is complete enough, if anyone has anything to add, please post it.
This section is about CFLAGS and CXXFLAGS (C and C++ Flags), these tell the compiler to run certain optimizations or options when compiling things.
I'm no GCC guru so I won't try to explain it, so here are some links.
Optimized gcc compiling
GCC Myths and Facts
GCC 3.2 flags