Make es un comando que construye un binario a partir de unas fuentes y un
makefile usando un compilador como
gcc. Con
make podemos llevar a cabo una de las cosas más interesantes de
Linux, que es personalizar y hacerlo para la arquitectura que aloje nuestro sistema. Con ésto, ganaremos en rendimiento al crear los programas optimizados para donde van a ser alojados. Algunas de las opciones que soporta
gcc y que podemos utilizar con
make más interesantes son:
-pipe Utiliza intercomunicación entre procesos(pipes) durante la compilación, lo cual acelera el proceso.
-fomit-frame-pointer Omite la inclusión del puntero al frame de pila guardado cuando este no es necesario, lo cual sirve para acelerar el proceso de compilación.
-O1, -O2, -O3 Seleccionando una de estas tres flags indicaremos al compilador que debe intentar optimizar el código para conseguir mayor velocidad en ejecución, siendo -O3 con lo que conseguiremos más velocidad
-march=Arquitectura Sin duda la más importante. Si sustituímos
Arquitectura por el nombre de la que aloja nuestro sistema compilaremos optimizando para ella exclusivamente, con lo que ganaremos en rendimiento y en estabilidad. Para ver el tipo de
CPU que tenemos podemos ejecutar
# cat /proc/cpuinfo
Aquí podeis ver una tabla con las diferentes arquitecturas de algunos de los fabricantes modernos
|| Arquitecturas || Valor de CHOST ||
|| i386 || i386-pc-linux-gnu ||
|| i486 || i486-pc-linux-gnu ||
|| i586 || i586-pc-linux-gnu ||
|| i686 || i686-pc-linux-gnu ||
|| pentium || i686-pc-linux-gnu ||
|| pentium-mmx || i686-pc-linux-gnu ||
|| pentiumpro || i686-pc-linux-gnu ||
|| pentium2 || i686-pc-linux-gnu ||
|| pentium3 || i686-pc-linux-gnu ||
|| pentium4 || i686-pc-linux-gnu ||
|| k6 || i586-pc-linux-gnu ||
|| k6-2 || i586-pc-linux-gnu ||
|| k6-3 || i586-pc-linux-gnu ||
|| athlon || i686-pc-linux-gnu ||
|| athlon-tbird || i586-pc-linux-gnu ||
|| athlon-4 || i586-pc-linux-gnu ||
|| athlon-xp || i586-pc-linux-gnu ||
|| ahtlon-mp || i586-pc-linux-gnu ||
|| alpha || alpha-unknown-linux-gnu ||
|| sparc || sparc-unknown-linux-gnu ||
|| hppa || sparc64-unknown-linux-gnu ||
|| mips || mips-unknown-linux-gnu ||
|| amd64 || x86_64-pc-linux-gnu ||
Las flags varían con la versión de
gcc que estemos usando, es recomendable leerse el manual para conocerlas a fondo. Para
gcc 3.x y
Pentium4 por ejemplo podemos definir estas flags
CHOST="i686-pc-linux-gnu"
CFLAGS="-march=pentium4 -O3 -pipe -fomit-frame-pointer"
Estas opciones se pueden configurar como variables de entorno válidas en la sesión actual o de forma permamente en el fichero
/etc/make.conf
Make install
Al ejecutar este comando instalaremos los binarios que hemos compilado con el comando
make anteriormente en las carpetas que por defecto tengan configuradas las fuentes como objetivo o las que le hayamos sumistrado mediante las opciones del script configure. Hasta este punto las instalación puede que se haya podido hacer como usuario, pero si el programa intenta escribir en alguna carpeta para la que no tiene permiso nos responderá con un "permiso denegado", por lo que deberemos cambiar a root para instalar los binarios o cambiar la ruta de instalación de éstos con el script configure.
En algunos casos estos pasos que hemos definido se automatizan con un sólo script(a veces situado en una carpeta llamada install), pero creo que es importante saber que va a hacer el script en caso de que tengamos que corregir algún fallo o configurar el programa de una forma característica.