Manualinux
http://www.nvu.com http://www.gimp.org InicioPresentaciónActualizacionesManualesDescargasNoticiasAgradecimientoEnlaces

Entornos GráficosAplicaciones

DesarrolloEmuladoresInternetJuegosMultimediaSistema

Instalar Clang desde ceroInstalar Dependencias para GCC

Instalar CMake desde cero




Instalar CMake desde cero




Copyright

Copyright © José Luis Lara Carrascal  2014-2018   http://manualinux.eu



Sumario

Introducción
CMake
Ninja
Parámetros más comunes a tener en cuenta en un proceso de compilación con CMake
Directorios y archivos a tener en cuenta en una instalación con CMake
Traducción al Español de CMake-gui
Iniciamos CMake-gui
Enlaces




Introducción

CMake, es un sistema multiplataforma de configuración, compilación e instalación de paquetes de código fuente. Y sustituto de las herramientas propias de GNU/Linux, más conocidas como GNU Autotools, en proyectos tan conocidos como el entorno de escritorio KDE. La única ventaja que proporciona CMake respecto a las herramientas GNU, es el uso de una versión integrada de Ccache para facilitar la reconfiguración y recompilación de un paquete, ventaja que los usuarios que utilizamos dicha herramienta de forma directa, ya tenemos. También proporciona de forma opcional el uso de una interfaz gráfica de configuración, cuyo traducción al español se publica junto a este manual. Desde el 28-02-2018 se incluye también la instalación de la alternativa a GNU Make, Ninja, soportado por CMake desde la versión 2.8.8.



CMake

Instalación 

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado CMake para la elaboración de este documento.

* GCC - (8.2.0)
* Make - (4.2.1)
* Bison - (3.2)
* Flex - (2.6.4)
* Pkg-config - (0.29.2)

Librerías de Desarrollo

* Xorg - (7.7 / xorg-server 1.20.3)
* Curl - (7.62.0)
* Expat - (2.2.6)
* JsonCpp - (1.8.4)
* Libarchive - (3.3.3)
* Libbzip2 - (1.0.6)
* LibRhash - (1.3.6)
* Libuv - (1.21.0)
* Libxml2 - (2.9.8)
* Ncurses - (6.1)
* Qt4 - (4.8.7)
* XZ Utils - (5.2.4)
* Zlib - (1.2.11)

Aplicaciones

* Sphinx - (1.8.1)



Descarga

cmake-3.12.4.tar.gz  |  cmake_qt4_locales.diff  |  cmake_ayuda_es.diff

Optimizaciones

$ export {C,CXX}FLAGS='-O3 -march=amdfam10 -mtune=amdfam10'

Donde pone amdfam10 se indica el procesador respectivo de cada sistema seleccionándolo de la siguiente tabla:
* La opción '-march=' establece el procesador mínimo con el que funcionará el programa compilado, la opción '-mtune=' el procesador específico para el que será optimizado. 

* Los valores separados por comas, son equivalentes, es decir, que lo mismo da poner '-march=k8' que '-march=athlon64'.

* En versiones de GCC 3.2 e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
Valores CPU
Genéricos
Intel
AMD
VIA
IDT

Optimizaciones adicionales

Optimizaciones adicionales
Graphite
$ export {C,CXX}FLAGS+=' -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block'

Parámetros adicionales

Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura
$ export LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64"

Establecer el RPATH correspondiente si utilizamos una versión de GCC que no es la principal del sistema
$ export LDFLAGS+="-Wl,-rpath,/opt/gcc8/lib64 -lstdc++"
Sustituir /opt/gcc8/lib64 por la ruta de instalación de la versión de GCC alternativa que se vaya a utilizar en el proceso de compilación de este paquete.

Extracción y Configuración  Bloc de Notas Información general sobre el uso de los comandos

$ tar zxvf cmake-3.12.4.tar.gz
$ cd cmake-3.12.4
$ patch -Np1 -i ../cmake_qt4_locales.diff
$ patch -Np1 -i ../cmake_ayuda_es.diff
$ ./configure --prefix=/usr --qt-gui --docdir=share/doc/cmake-3.12 \
--mandir=share/man --sphinx-man --sphinx-html --system-libs \
--parallel=$(cat /proc/cpuinfo | grep -m1 'cpu cores' | cut -d " " -f3)

Explicación de los comandos

patch -Np1 -i ../cmake_qt4_locales.diff : Aplicamos este parche personal para que cmake-gui cargue también las locales en español de Qt4, no sólo la traducción del programa.

patch -Np1 -i ../cmake_ayuda_es.diff : Y con este otro parche personal, traducimos de forma directa el texto que se muestra en la ventana de ayuda de cmake-gui, ya que el programa no carga la traducción de la misma.

--prefix=/usr : Instala CMake en el directorio principal /usr.
--qt-gui : Compila la interfaz gráfica de configuracion, cmake-gui.

--docdir=share/doc/cmake-3.12
: Instala la documentación en /usr/share/doc, en lugar de /usr/doc.
--mandir=share/man : Instala las páginas de manual en /usr/share/man, en lugar de /usr/man.

--sphinx-man : Crea e instala las páginas de manual del programa con Sphinx.
--sphinx-html : Crea e instala la documentación en formato HTML del programa con Sphinx.

--system-libs : Activa el soporte de las versiones instaladas en el sistema de Curl, Expat, JsonCpp, Libarchive, Libbzip2, LibRhash, Ncurses, Libuv, XZ Utils y Zlib en el proceso de compilación, en lugar de la integración estática de las mismas con las versiones incluidas en el paquete. 

--parallel=$(cat /proc/cpuinfo | grep -m1 'cpu cores' | cut -d " " -f3) : Establecemos el número de procesos en paralelo de compilación, en la fase de configuración del paquete, tomando como referencia la información del número de núcleos de nuestro procesador, proporcionada por el kernel. Si nuestro procesador no es multinúcleo, no añadir este parámetro.

Compilación

$ make 

Parámetros de compilación opcionales  

VERBOSE=1 : Muestra más información en el proceso de compilación.

-j2 : Si tenemos un procesador de doble núcleo (dual-core), y el kernel está optimizado para el mismo y es SMP, con este parámetro aumentaremos el número de procesos de compilación simultáneos a un nivel de 2 y aceleraremos el tiempo de compilación del programa de forma considerable.
-j4 : Lo mismo que arriba pero con procesadores de 4 núcleos (quad-core).

Instalación como root

$ su
# make install/strip
# update-mime-database /usr/share/mime &> /dev/null

Estadísticas de Compilación e Instalación de CMake

Estadísticas de Compilación e Instalación de CMake
CPU AMD Phenom(tm) II X4 965 Processor
MHz 3415.709
RAM 4096 MB
Sistema de archivos XFS
Versión del Kernel 4.18.16-ck1 SMP PREEMPT x86_64
Modo de frecuencia de la CPU ondemand
Versión de Glibc 2.28
Enlazador dinámico GNU gold (Binutils 2.31.1) 1.16
Compilador GCC 8.2.0
Parámetros de optimización -03 -march=amdfam10 -mtune=amdfam10 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block
Parámetros de compilación VERBOSE=1 -j4
Tiempo de configuración 2' 07"
Tiempo de compilación  4' 07"
Tiempo total consumido 6' 14"
Archivos instalados 5.298
Mostrar/Ocultar la lista de archivos instalados
Ocupación de espacio en disco 67,6 MB

Directorio de configuración personal

~/.config/Kitware Es el directorio de configuración personal de CMake-gui en nuestro home.

Desinstalación como root

1) MODO TRADICIONAL

En el directorio de compilación ejecutamos los siguientes comandos:

$ su
# make uninstall
# update-mime-database /usr/share/mime &> /dev/null

2) MODO MANUALINUX

El principal inconveniente del comando anterior es que tenemos que tener el directorio de compilación en nuestro sistema para poder desinstalar el programa. En algunos casos esto supone muchos megas de espacio en disco. Con el paquete de scripts que pongo a continuación logramos evitar el único inconveniente que tiene la compilación de programas, y es el tema de la desinstalación de los mismos sin la necesidad de tener obligatoriamente una copia de las fuentes compiladas.

cmake-3.12.4-scripts.tar.gz

$ su
# tar zxvf cmake-3.12.4-scripts.tar.gz
# cd cmake-3.12.4-scripts
# ./Desinstalar_cmake-3.12.4

Copia de Seguridad como root

Con este otro script creamos una copia de seguridad de los binarios compilados, recreando la estructura de directorios de los mismos en un directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos volver a restaurar la copia, tendremos que volver a copiarlo al lugar donde se ha creado.

$ su
# tar zxvf cmake-3.12.4-scripts.tar.gz
# cd cmake-3.12.4-scripts
# ./Respaldar_cmake-3.12.4

Restaurar la Copia de Seguridad como root

Y con este otro script (que se copia de forma automática cuando creamos la copia de respaldo del programa) restauramos la copia de seguridad como root cuando resulte necesario.

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_cmake-3.12.4



Ninja

Un sistema de compilación multinúcleo de características similares a GNU Make, pero con un diseño más sencillo que lo hace más rápido (según su autor, otra cosa es el mundo real) a la hora de utilizarlo para compilar paquetes de código fuente. Desde la versión 2.8.8 de CMake, éste puede generar, pasándole el parámetro correspondiente, los archivos de configuración pertinentes para poder compilar el paquete con Ninja.

Instalación 

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado Ninja para la elaboración de este documento.

* GCC - (8.1.0)

Intérpretes de Lenguaje de Programación

* Python - (2.7.15)



Descarga

ninja-1.8.2.tar.gz

Optimizaciones

Optimizaciones adicionales

Optimizaciones adicionales
Graphite
$ export {C,CXX}FLAGS+=' -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block'

Parámetros adicionales

Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura
$ export LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64"

Establecer el RPATH correspondiente si utilizamos una versión de GCC que no es la principal del sistema
$ export LDFLAGS+=" -Wl,-rpath,/opt/gcc8/lib64 -lstdc++"
Sustituir /opt/gcc8/lib64 por la ruta de instalación de la versión de GCC alternativa que se vaya a utilizar en el proceso de compilación de este paquete.

Extracción y Compilación  Bloc de Notas Información general sobre el uso de los comandos

$ tar zxvf ninja-1.8.2.tar.gz
$ cd ninja-1.8.2
$ python configure.py --bootstrap

Instalación como root

$ su -c "install -sm755 ninja /usr/bin"

Estadísticas de Compilación e Instalación de Ninja

Estadísticas de Compilación e Instalación de Ninja
CPU AMD Phenom(tm) II X4 965 Processor
MHz 3415.709
RAM 4096 MB
Sistema de archivos XFS
Versión del Kernel 4.17.14-ck1 SMP PREEMPT x86_64
Modo de frecuencia de la CPU ondemand
Versión de Glibc 2.28
Enlazador dinámico GNU gold (Binutils 2.31.1) 1.16
Compilador GCC 8.2.0
Parámetros de optimización -03 -march=amdfam10 -mtune=amdfam10 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block
Tiempo de compilación 35"
Archivos instalados 1
/usr/bin/ninja
Ocupación de espacio en disco 212 KB

Desinstalación como root

1) MODO TRADICIONAL

$ su -c "rm -f /usr/bin/ninja"

2) MODO MANUALINUX

ninja-1.8.2-scripts.tar.gz

$ su
# tar zxvf ninja-1.8.2-scripts.tar.gz
# cd ninja-1.8.2-scripts
# ./Desinstalar_ninja-1.8.2

Copia de Seguridad como root

$ su
# tar zxvf ninja-1.8.2-scripts.tar.gz
# cd ninja-1.8.2-scripts
# ./Respaldar_ninja-1.8.2

Restaurar la Copia de Seguridad como root

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_ninja-1.8.2

Opciones de línea de comandos de Ninja
Opción Descripción
-C DIR
Cambia al directorio establecido en DIR, es decir, nos ahorra tener que ejecutar el comando cd para ir a dicho directorio, y ejecutar el comando de compilación en el mismo.
-f ARCHIVO Especifica un archivo de configuración determinado. Por defecto es ninja.build.
-j
Establece un número predefinido (nº) de procesos en paralelo. Por defecto es el número de núcleos que tiene nuestro procesador más dos procesos adicionales. Con lo que es recomendable hacer uso de esta opción, de la misma manera que lo hacemos con GNU Make, ajustando el número al número de núcleos que tiene nuestro procesador.
-k
Define cuántos procesos en paralelo deben de fallar para que la compilación se interrumpa. Por defecto es 1.
-l
No inicia nuevos procesos si el promedio de carga es mayor que nº
-n
Ejecuta una simulación del proceso de compilación sin compilar nada.
-v
Muestra más información en el proceso de compilación.
install Instala el paquete compilado.
install/strip Instala el paquete compilado con CMake eliminando los símbolos innecesarios para su ejecución. Si utilizamos Ninja con el sistema de compilación, Meson, la opción de eliminación de símbolos hay que establecerla en las opciones de configuración del paquete con Meson, con el parámetro --strip.
clean Borra la compilación generada.



Parámetros más comunes a tener en cuenta en un proceso de compilación con CMake

En la tabla que pongo a continuación muestro los parámetros más comunes utilizados con CMake. Los parámetros siempre deben ir precedidos del prefijo -D, que puede ir separado o pegado al parámetro, aunque es preferible que vaya pegado, excepto las opciones propias de línea de comandos del programa. Si el archivo de configuración del paquete, CMakeList.txt, no contiene dicho parámetro, éste no será aplicado en el proceso de compilación, y se nos mostrará un mensaje cuando finalice el proceso de configuración del paquete. Con las GNU Autotools, podemos saber antes de ejecutar el script de configuración, las opciones posibles de configuración, con CMake esto no es posible. Y tendremos que echar mano del archivo CMakeCache.txt que se crea en el directorio de compilación, para saber qué podemos utilizar y qué no podemos utilizar como parámetro de configuración.

Para saber todos los parámetros de configuración aceptados de forma genérica por CMake, basta ejecutar el siguiente comando en una ventana de terminal:

$ cmake --help-variable-list

Los parámetros incluidos en el archivo CMakeCache.txt pueden ser reducidos en la línea de comandos, omitiendo parte del mismo. Un ejemplo:

CMAKE_INSTALL_PREFIX:PATH=/usr/local es lo mismo que CMAKE_INSTALL_PREFIX=/usr/local, nos podemos comer siempre el contenido incluido entre los dos puntos y el signo igual, y también los dos puntos.

He puesto los más utilizados en los manuales de la web, no todos los que soporta CMake. Todas los valores de las opciones que no contengan espacios, pueden escribirse sin necesidad de utilizar comillas o comillas simples.

Parámetros más comunes a tener en cuenta en un proceso de compilación con CMake
Opción Descripción
-DCMAKE_INSTALL_PREFIX=
Establece la ruta de instalación del paquete.
-DCMAKE_BUILD_TYPE= Establece el modo de optimización a usarse en el proceso de compilación. Si queremos que el establecido en la variable de entorno correspondiente (-O3), no sea sobreescrito por el predefinido del paquete, lo recomendable es utilizar el valor Release en este parámetro concreto.
-DCMAKE_PREFIX_PATH=
Establece la ruta a los archivos de configuración de CMake, de una dependencia del paquete concreta, en el caso de que la hayamos instalado en un directorio no habitual del sistema. Un ejemplo con la ubicación de la instalación de Qt5, utilizando pkg-config para localizar la ruta a dichos archivos:

-DCMAKE_PREFIX_PATH=$(pkg-config --variable=libdir Qt5Core)/cmake
-DCMAKE_AR=
-DCMAKE_NM=
-DCMAKE_RANLIB=
En versiones anteriores de CMake a la 3.9, era suficiente con sincronizar las variables de entorno establecidas con el parámetro equivalente de CMake, en la mayoría de procesos de compilación en los que se utilizan las optimizaciones LTO o ThinLTO, y se requiere del uso de los binarios ejecutables intermedios, con los siguientes parámetros:

-DCMAKE_AR=$AR -DCMAKE_RANLIB=$RANLIB -DCMAKE_NM=$NM

Pero a partir de esta versión en concreto, el proceso de configuración, establece una ruta errónea al directorio mismo de compilación. Con lo que tendremos que utilizar una combinación del programa which y la variable de entorno, para que localice la ruta completa al binario ejecutable en cuestión.

-DCMAKE_AR=$(which $AR) -DCMAKE_RANLIB=$(which $RANLIB) -DCMAKE_NM=$(which $NM)
-G 
Establece el sistema de compilación a utilizar para la instalación del paquete en cuestión. Si queremos utilizar Ninja en lugar del tradicional GNU Make, añadimos la siguiente opción al comando de configuración de CMake:

-G Ninja

Siempre que hagamos una modificación de parámetros ya establecidos, en línea de comandos o en modo gráfico con Cmake-gui, es necesario borrar previamente el contenido del directorio de compilación, para que las modificaciones introducidas sean efectivas. 

A medida que se han ido publicando nuevas versiones de CMake, se ha ido implementando una mejor integración del mismo con las variables de entorno utilizadas habitualmente en procesos de compilación nativos del sistema. Hasta el punto que, a día de hoy, CMake acepta de forma automática, la mayoría de ellas: CFLAGS, CXXFLAGS, CPPFLAGS, LDFLAGS, etc.

Por último, con CMake la opción de comando para eliminar los símbolos innecesarios para la ejecución de los binarios es install/strip en lugar de install-strip que es el utilizado por las GNU Autotools. Esta opción de instalación es independiente de si utilizamos make o ninja para compilar el paquete en cuestión.



Directorios y archivos a tener en cuenta en una instalación con CMake

Utilizando como ejemplo, la instalación de OpenAL.

openal-soft-1.18.2 Es el directorio raíz del paquete de código fuente, y el tomado como referencia para realizar el proceso de configuración, siempre y cuando éste contenga el archivo de configuración principal CMakeList.txt, a partir del cual se genera el proceso de configuración.
openal-soft-1.18.2/build Es el directorio de compilación en el que se generarán los binarios del paquete de código fuente. Si no existe, hay que crearlo. Y desde el cual tenemos que ejecutar el comando de configuración del paquete apuntando al directorio raíz del mismo.

El directorio lo podemos crear donde nos venga en gana, dentro del directorio raíz, fuera del directorio raíz, y con el nombre que queramos, pero una vez dentro del mismo, el comando de configuración siempre debe de apuntar al directorio de ubicación del código fuente, o al directorio que contenga el archivo de configuración principal CMakeList.txt. Un ejemplo:

$ tar jxvf openal-soft-1.18.2.tar.bz2
$ mkdir openal_build
$ cd openal_build
$ cmake ../openal-soft-1.18.2

Cuando tengamos problemas en la configuración del paquete, es conveniente siempre borrar el contenido de este directorio y volver a empezar.
openal-soft-1.18.2/CMakeList.txt Es el archivo de configuración principal del paquete, contiene todas los parámetros de configuración del mismo, pero es más fácil leerlos en el que viene a continuación.
openal-soft-1.18.2/build/CMakeCache.txt Es el archivo caché de la configuración generada una vez hemos ejecutado el comando de configuración. Si tenemos que añadir o quitar parámetros al comando de configuración, este archivo es bastante más legible que el principal de configuración.
openal-soft-1.18.2/build/install_manifest.txt Es el archivo de registro de los archivos instalados del paquete, y se genera en el proceso de instalación del mismo.



Traducción al Español de CMake-gui  

Descarga

CMake-gui_es-ML0.run

Firma Digital  Clave pública PGP

CMake-gui_es-ML0.run.asc 

Verificar la firma digital del paquete

$ gpg --import manualinux.asc 
$ gpg --verify CMake-gui_es-ML0.run.asc CMake-gui_es-ML0.run

Instalación como root

$ su -c "sh CMake-gui_es-ML0.run"



Iniciamos CMake-gui  

Sólo nos queda teclear en una terminal o en un lanzador el comando cmake-gui, y el programa aparecerá en la pantalla. Es una interfaz gráfica de configuración, pero no de compilación, ni de extracción de paquetes. Eso lo tendremos que hacer de forma manual, desde la línea de comandos.

Captura CMake-gui - 1


Captura CMake-gui - 1


Captura CMake - 3




Enlaces


http://www.cmake.org >> La web de CMake.

http://ninja-build.org >> La web de Ninja.


Foro Galería Blog


Actualizado el 02-11-2018

Instalar CMake desde cero

Instalar Clang desde ceroInstalar Dependencias para GCC