Está en la página 1de 30

Introducción Ejecutando CMake Ejemplos Final

CMake: Sistema de Compilación para C/C++

Daniel Molina

Universidad of Cádiz, Departamento de Lenguaje y Sistemas Informáticos,


OSLUCA

29 de Junio 2009, Cádiz


Introducción Ejecutando CMake Ejemplos Final

Presentación

1 Introducción

2 Ejecutando CMake

3 Ejemplos
Introducción Ejecutando CMake Ejemplos Final

Qué es CMake

CMake:
Genera ficheros de compilación.
Introducción Ejecutando CMake Ejemplos Final

Qué es CMake

CMake:
Genera ficheros de compilación.
Unix/Linux → Makefiles.
Windows → Proyectos Visual Studio.
Apple → Xcode.
Introducción Ejecutando CMake Ejemplos Final

Qué es CMake

CMake:
Genera ficheros de compilación.
Unix/Linux → Makefiles.
Windows → Proyectos Visual Studio.
Apple → Xcode.
Multiplataforma.
Introducción Ejecutando CMake Ejemplos Final

Qué es CMake

CMake:
Genera ficheros de compilación.
Unix/Linux → Makefiles.
Windows → Proyectos Visual Studio.
Apple → Xcode.
Multiplataforma.
Software Libre :-).
Introducción Ejecutando CMake Ejemplos Final

Qué es CMake

CMake:
Genera ficheros de compilación.
Unix/Linux → Makefiles.
Windows → Proyectos Visual Studio.
Apple → Xcode.
Multiplataforma.
Software Libre :-).

Pero si mi aplicación no es multiplataforma


Introducción Ejecutando CMake Ejemplos Final

Qué es CMake

CMake:
Genera ficheros de compilación.
Unix/Linux → Makefiles.
Windows → Proyectos Visual Studio.
Apple → Xcode.
Multiplataforma.
Software Libre :-).

Pero si mi aplicación no es multiplataforma


Más sencillo que Makefiles a mano.
Introducción Ejecutando CMake Ejemplos Final

Qué es CMake

CMake:
Genera ficheros de compilación.
Unix/Linux → Makefiles.
Windows → Proyectos Visual Studio.
Apple → Xcode.
Multiplataforma.
Software Libre :-).

Pero si mi aplicación no es multiplataforma


Más sencillo que Makefiles a mano.
¿Para eso no están las autotools?
Introducción Ejecutando CMake Ejemplos Final

Ventajas frente a Makefile y Autotools

CMake Versus Makefile CMake Versus Autotools


Más cómodo y fácil. Menor curva de aprendizaje.
Introducción Ejecutando CMake Ejemplos Final

Ventajas frente a Makefile y Autotools

CMake Versus Makefile CMake Versus Autotools


Más cómodo y fácil. Menor curva de aprendizaje.
¿He dicho que es más fácil? No usa M4 :-).
Introducción Ejecutando CMake Ejemplos Final

Ventajas frente a Makefile y Autotools

CMake Versus Makefile CMake Versus Autotools


Más cómodo y fácil. Menor curva de aprendizaje.
¿He dicho que es más fácil? No usa M4 :-).
Portable. Más portable.
Introducción Ejecutando CMake Ejemplos Final

Ventajas frente a Makefile y Autotools

CMake Versus Makefile CMake Versus Autotools


Más cómodo y fácil. Menor curva de aprendizaje.
¿He dicho que es más fácil? No usa M4 :-).
Portable. Más portable.
Más opciones Más fácil de extender.
(búsqueda de librerı́as, . . .).
Introducción Ejecutando CMake Ejemplos Final

Ventajas frente a Makefile y Autotools

CMake Versus Makefile CMake Versus Autotools


Más cómodo y fácil. Menor curva de aprendizaje.
¿He dicho que es más fácil? No usa M4 :-).
Portable. Más portable.
Más opciones Más fácil de extender.
(búsqueda de librerı́as, . . .). Mejor documentado.
Introducción 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 compilación (Debug, Release, . . . ).
Admite jerarquı́a de directorios complejas, y detecta librerı́as.
Introducción Ejecutando CMake Ejemplos Final

Quién lo está 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/
Introducción Ejecutando CMake Ejemplos Final

Estructura

CMakefiles.txt: Formato del fichero, define el flujo de control


en sintaxis CMake.
Módulos CMake: Módulos que extienden la funcionalidad de
CMake, principalmente en buscar aplicaciones/herramientas.
Ejemplo: FindQt4.cmake, FindJava.cmake
Introducción Ejecutando CMake Ejemplos Final

Ejecutando CMake

Preparar el fichero CMakeLists.txt:


Con editor favorito.
Visualmente: cmake-gui.
Ejecutar cmake . → Makefile
Compilar (make)
Introducción Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura CMakeLists.txt
hello src PROJECT(hello C)
hello.c SET(SRC
CMakeLists.txt hello.c)

ADD EXECUTABLE(hello ${SRC})


Introducción Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura CMakeLists.txt
hello src PROJECT(hello C)
hello.c SET(SRC
CMakeLists.txt hello.c)
Makefile
ADD EXECUTABLE(hello ${SRC})
Introducción Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura CMakeLists.txt
hello src PROJECT(hello C)
hello.c SET(SRC
CMakeLists.txt hello.c)
Makefile
ADD EXECUTABLE(hello ${SRC})
CMakeFiles
CMakeCache.txt
cmake install.cmake
hello
Introducción Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura
hello src
hello.c
CMakeLists.txt

Makefile
CMakeFiles
CMakeCache.txt

cmake install.cmake

hello → Ejecutable
Introducción Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura
hello src
hello.c
CMakeLists.txt

Makefile → Fichero autogenerado


CMakeFiles
CMakeCache.txt

cmake install.cmake

hello → Ejecutable
Introducción Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura
hello src
hello.c
CMakeLists.txt

Makefile → Fichero autogenerado


CMakeFiles → Directorio con ficheros objeto (.o)
CMakeCache.txt

cmake install.cmake

hello → Ejecutable
Introducción Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura
hello src
hello.c
CMakeLists.txt

Makefile → Fichero autogenerado


CMakeFiles → Directorio con ficheros objeto (.o)
CMakeCache.txt → Fichero caché (evitar recompilar
innecesariamente)
cmake install.cmake

hello → Ejecutable
Introducción Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Estructura
hello src
hello.c
CMakeLists.txt

Makefile → Fichero autogenerado


CMakeFiles → Directorio con ficheros objeto (.o)
CMakeCache.txt → Fichero caché (evitar recompilar
innecesariamente)
cmake install.cmake → Fichero de instalación/desistalación
(cuando se usa)
hello → Ejecutable
Introducción Ejecutando CMake Ejemplos Final

Ejemplo: “Hello, World”

Otra alternativa:
mkdir build
cd build
cmake ..
Ası́, todos los ficheros adicionales están en bin
También se puede hacer configurando adecuadamente
CMakeLists.txt
Introducción Ejecutando CMake Ejemplos Final

Otras versiones

hellolib.c hello.c
#i n c l u d e <s t d i o . h> /∗ h e l l o . c : d i s p l a y a m e s s a g e
#i n c l u d e <s t r i n g . h> on t h e s c r e e n ∗/
#i n c l u d e <s t d i o . h>
v o i d g e t m s g ( c h a r ∗msg ) { #i n c l u d e ” h e l l o l i b . h”
s t r c p y ( msg , ” h e l l o , w o r l d \n ” ) ;
} i n t main ( v o i d ) {
c h a r msg [ 3 0 ] ;

g e t m s g ( msg ) ;
p r i n t f ( msg ) ;
hellolib.h return 0;
}
#i f n d e f HELLO LIB H

#d e f i n e HELLO LIB H 1

v o i d g e t m s g ( c h a r ∗msg ) ;

#e n d i f
Introducción Ejecutando CMake Ejemplos Final

Usando Librerı́a Dinámica Versus Sin Usar

Sin ibrerı́a
PROJECT( h e l l o C)
SET ( SRC
hello
hellolib )

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

Con Librerı́a Dinámica


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

SET ( SRC
hello )

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 hellolib )


Introducción Ejecutando CMake Ejemplos Final

Espero que esta introducción


motive para el taller
¿Empezamos? :-)

También podría gustarte