Introducción a CMake en inglés

Preview:

Citation preview

Introduccion Ejecutando CMake Ejemplos Final

CMake: Sistema de Compilacion para C/C++

Daniel Molina

Universidad of Cadiz, Departamento de Lenguaje y Sistemas Informaticos,OSLUCA

29 de Junio 2009, Cadiz

Introduccion Ejecutando CMake Ejemplos Final

Presentacion

1 Introduccion

2 Ejecutando CMake

3 Ejemplos

Introduccion Ejecutando CMake Ejemplos Final

Que es CMake

CMake:

Genera ficheros de compilacion.

Unix/Linux → Makefiles.Windows → Proyectos Visual Studio.Apple → Xcode.

Multiplataforma.Software Libre :-).

Pero si mi aplicacion no es multiplataforma

Mas sencillo que Makefiles a mano.

¿Para eso no estan las autotools?

Introduccion Ejecutando CMake Ejemplos Final

Que es CMake

CMake:

Genera ficheros de compilacion.

Unix/Linux → Makefiles.Windows → Proyectos Visual Studio.Apple → Xcode.

Multiplataforma.Software Libre :-).

Pero si mi aplicacion no es multiplataforma

Mas sencillo que Makefiles a mano.

¿Para eso no estan las autotools?

Introduccion Ejecutando CMake Ejemplos Final

Que es CMake

CMake:

Genera ficheros de compilacion.

Unix/Linux → Makefiles.Windows → Proyectos Visual Studio.Apple → Xcode.

Multiplataforma.

Software Libre :-).

Pero si mi aplicacion no es multiplataforma

Mas sencillo que Makefiles a mano.

¿Para eso no estan las autotools?

Introduccion Ejecutando CMake Ejemplos Final

Que es CMake

CMake:

Genera ficheros de compilacion.

Unix/Linux → Makefiles.Windows → Proyectos Visual Studio.Apple → Xcode.

Multiplataforma.Software Libre :-).

Pero si mi aplicacion no es multiplataforma

Mas sencillo que Makefiles a mano.

¿Para eso no estan las autotools?

Introduccion Ejecutando CMake Ejemplos Final

Que es CMake

CMake:

Genera ficheros de compilacion.

Unix/Linux → Makefiles.Windows → Proyectos Visual Studio.Apple → Xcode.

Multiplataforma.Software Libre :-).

Pero si mi aplicacion no es multiplataforma

Mas sencillo que Makefiles a mano.

¿Para eso no estan las autotools?

Introduccion Ejecutando CMake Ejemplos Final

Que es CMake

CMake:

Genera ficheros de compilacion.

Unix/Linux → Makefiles.Windows → Proyectos Visual Studio.Apple → Xcode.

Multiplataforma.Software Libre :-).

Pero si mi aplicacion no es multiplataforma

Mas sencillo que Makefiles a mano.

¿Para eso no estan las autotools?

Introduccion Ejecutando CMake Ejemplos Final

Que es CMake

CMake:

Genera ficheros de compilacion.

Unix/Linux → Makefiles.Windows → Proyectos Visual Studio.Apple → Xcode.

Multiplataforma.Software Libre :-).

Pero si mi aplicacion no es multiplataforma

Mas sencillo que Makefiles a mano.

¿Para eso no estan las autotools?

Introduccion Ejecutando CMake Ejemplos Final

Ventajas frente a Makefile y Autotools

CMake Versus Makefile

Mas comodo y facil.

¿He dicho que es mas facil?

Portable.

Mas opciones(busqueda de librerıas, . . .).

CMake Versus Autotools

Menor curva de aprendizaje.

No usa M4 :-).

Mas portable.

Mas facil de extender.

Mejor documentado.

Introduccion Ejecutando CMake Ejemplos Final

Ventajas frente a Makefile y Autotools

CMake Versus Makefile

Mas comodo y facil.

¿He dicho que es mas facil?

Portable.

Mas opciones(busqueda de librerıas, . . .).

CMake Versus Autotools

Menor curva de aprendizaje.

No usa M4 :-).

Mas portable.

Mas facil de extender.

Mejor documentado.

Introduccion Ejecutando CMake Ejemplos Final

Ventajas frente a Makefile y Autotools

CMake Versus Makefile

Mas comodo y facil.

¿He dicho que es mas facil?

Portable.

Mas opciones(busqueda de librerıas, . . .).

CMake Versus Autotools

Menor curva de aprendizaje.

No usa M4 :-).

Mas portable.

Mas facil de extender.

Mejor documentado.

Introduccion Ejecutando CMake Ejemplos Final

Ventajas frente a Makefile y Autotools

CMake Versus Makefile

Mas comodo y facil.

¿He dicho que es mas facil?

Portable.

Mas opciones(busqueda de librerıas, . . .).

CMake Versus Autotools

Menor curva de aprendizaje.

No usa M4 :-).

Mas portable.

Mas facil de extender.

Mejor documentado.

Introduccion Ejecutando CMake Ejemplos Final

Ventajas frente a Makefile y Autotools

CMake Versus Makefile

Mas comodo y facil.

¿He dicho que es mas facil?

Portable.

Mas opciones(busqueda de librerıas, . . .).

CMake Versus Autotools

Menor curva de aprendizaje.

No usa M4 :-).

Mas portable.

Mas facil de extender.

Mejor documentado.

Introduccion Ejecutando CMake Ejemplos Final

Caracterısticas de CMake

Utilizado en entornos complejos (VTK+, KDE4, . . . ).

Flexible y Extensible.

Soporte de macros (buscar/configurar software).

Ejecutar programar externos.

Syntaxis Intuitiva.

Modos de compilacion (Debug, Release, . . . ).

Admite jerarquıa de directorios complejas, y detecta librerıas.

Introduccion Ejecutando CMake Ejemplos Final

Quien lo esta usando

Kitware, http://www.kitware.com/

The Visualization ToolKit (VTK), http://www.vtk.org/

ParaView, http://www.paraview.org/

KDE 4, https://lwn.net/Articles/188693/

Introduccion Ejecutando CMake Ejemplos Final

Estructura

CMakefiles.txt: Formato del fichero, define el flujo de controlen sintaxis CMake.

Modulos CMake: Modulos que extienden la funcionalidad deCMake, principalmente en buscar aplicaciones/herramientas.

Ejemplo: FindQt4.cmake, FindJava.cmake

Introduccion Ejecutando CMake Ejemplos Final

Ejecutando CMake

Preparar el fichero CMakeLists.txt:

Con editor favorito.Visualmente: cmake-gui.

Ejecutar cmake . → Makefile

Compilar (make)

Introduccion Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura

hello src

hello.cCMakeLists.txt

Makefile

CMakeFiles

CMakeCache.txt

cmake install.cmake

hello

CMakeLists.txt

PROJECT(hello C)SET(SRC

hello.c)

ADD EXECUTABLE(hello ${SRC})

Introduccion Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura

hello src

hello.cCMakeLists.txt

Makefile

CMakeFiles

CMakeCache.txt

cmake install.cmake

hello

CMakeLists.txt

PROJECT(hello C)SET(SRC

hello.c)

ADD EXECUTABLE(hello ${SRC})

Introduccion Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura

hello src

hello.cCMakeLists.txt

Makefile

CMakeFiles

CMakeCache.txt

cmake install.cmake

hello

CMakeLists.txt

PROJECT(hello C)SET(SRC

hello.c)

ADD EXECUTABLE(hello ${SRC})

Introduccion Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura

hello src

hello.cCMakeLists.txt

Makefile

→ Fichero autogenerado

CMakeFiles

→ Directorio con ficheros objeto (.o)

CMakeCache.txt

→ Fichero cache (evitar recompilarinnecesariamente)

cmake install.cmake

→ Fichero de instalacion/desistalacion(cuando se usa)

hello → Ejecutable

Introduccion Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura

hello src

hello.cCMakeLists.txt

Makefile → Fichero autogenerado

CMakeFiles

→ Directorio con ficheros objeto (.o)

CMakeCache.txt

→ Fichero cache (evitar recompilarinnecesariamente)

cmake install.cmake

→ Fichero de instalacion/desistalacion(cuando se usa)

hello → Ejecutable

Introduccion Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura

hello src

hello.cCMakeLists.txt

Makefile → Fichero autogenerado

CMakeFiles → Directorio con ficheros objeto (.o)

CMakeCache.txt

→ Fichero cache (evitar recompilarinnecesariamente)

cmake install.cmake

→ Fichero de instalacion/desistalacion(cuando se usa)

hello → Ejecutable

Introduccion Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura

hello src

hello.cCMakeLists.txt

Makefile → Fichero autogenerado

CMakeFiles → Directorio con ficheros objeto (.o)

CMakeCache.txt → Fichero cache (evitar recompilarinnecesariamente)

cmake install.cmake

→ Fichero de instalacion/desistalacion(cuando se usa)

hello → Ejecutable

Introduccion Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura

hello src

hello.cCMakeLists.txt

Makefile → Fichero autogenerado

CMakeFiles → Directorio con ficheros objeto (.o)

CMakeCache.txt → Fichero cache (evitar recompilarinnecesariamente)

cmake install.cmake → Fichero de instalacion/desistalacion(cuando se usa)

hello → Ejecutable

Introduccion Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Otra alternativa:

mkdir buildcd buildcmake ..

Ası, todos los ficheros adicionales estan en bin

Tambien se puede hacer configurando adecuadamenteCMakeLists.txt

Introduccion Ejecutando CMake Ejemplos Final

Otras versiones

hellolib.c

#i n c l u d e <s t d i o . h>#i n c l u d e <s t r i n g . h>

v o i d get msg ( c h a r ∗msg ) {s t r c p y ( msg , ” h e l l o , w o r l d\n ” ) ;

}

hellolib.h

#i f n d e f HELLO LIB H

#d e f i n e HELLO LIB H 1

v o i d get msg ( c h a r ∗msg ) ;

#e n d i f

hello.c

/∗ h e l l o . c : d i s p l a y a messageon t h e s c r e e n ∗/

#i n c l u d e <s t d i o . h>#i n c l u d e ” h e l l o l i b . h”

i n t main ( v o i d ) {c h a r msg [ 3 0 ] ;

get msg ( msg ) ;p r i n t f ( msg ) ;r e t u r n 0 ;

}

Introduccion Ejecutando CMake Ejemplos Final

Usando Librerıa Dinamica Versus Sin Usar

Sin ibrerıa

PROJECT( h e l l o C)SET(SRC

h e l l oh e l l o l i b )

ADD EXECUTABLE( h e l l o ${SRC})

Con Librerıa Dinamica

PROJECT( h e l l o C)SET( LIBSRC

h e l l o l i b )

SET(SRCh e l l o )

ADD LIBRARY( h e l l o l i b SHARED ${LIBSRC})

ADD EXECUTABLE( h e l l o ${SRC})

TARGET LINK LIBRARIES ( h e l l o h e l l o l i b )

Introduccion Ejecutando CMake Ejemplos Final

Espero que esta introduccionmotive para el taller

¿Empezamos? :-)

Recommended