CMake - Universidad de Cádiz

Anuncio
Introducción
Ejecutando CMake
Ejemplos
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
Final
Introducción
Ejecutando CMake
Presentación
1
Introducción
2
Ejecutando CMake
3
Ejemplos
Ejemplos
Final
Introducción
Ejecutando CMake
Qué es CMake
CMake:
Genera ficheros de compilación.
Ejemplos
Final
Introducción
Ejecutando CMake
Qué es CMake
CMake:
Genera ficheros de compilación.
Unix/Linux → Makefiles.
Windows → Proyectos Visual Studio.
Apple → Xcode.
Ejemplos
Final
Introducción
Ejecutando CMake
Qué es CMake
CMake:
Genera ficheros de compilación.
Unix/Linux → Makefiles.
Windows → Proyectos Visual Studio.
Apple → Xcode.
Multiplataforma.
Ejemplos
Final
Introducción
Ejecutando CMake
Qué es CMake
CMake:
Genera ficheros de compilación.
Unix/Linux → Makefiles.
Windows → Proyectos Visual Studio.
Apple → Xcode.
Multiplataforma.
Software Libre :-).
Ejemplos
Final
Introducción
Ejecutando CMake
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
Ejemplos
Final
Introducción
Ejecutando CMake
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.
Ejemplos
Final
Introducción
Ejecutando CMake
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?
Ejemplos
Final
Introducción
Ejecutando CMake
Ejemplos
Ventajas frente a Makefile y Autotools
CMake Versus Makefile
Más cómodo y fácil.
CMake Versus Autotools
Menor curva de aprendizaje.
Final
Introducción
Ejecutando CMake
Ejemplos
Ventajas frente a Makefile y Autotools
CMake Versus Makefile
Más cómodo y fácil.
¿He dicho que es más fácil?
CMake Versus Autotools
Menor curva de aprendizaje.
No usa M4 :-).
Final
Introducción
Ejecutando CMake
Ejemplos
Ventajas frente a Makefile y Autotools
CMake Versus Makefile
Más cómodo y fácil.
CMake Versus Autotools
Menor curva de aprendizaje.
¿He dicho que es más fácil?
No usa M4 :-).
Portable.
Más portable.
Final
Introducción
Ejecutando CMake
Ejemplos
Ventajas frente a Makefile y Autotools
CMake Versus Makefile
Más cómodo y fácil.
CMake Versus Autotools
Menor curva de aprendizaje.
¿He dicho que es más fácil?
No usa M4 :-).
Portable.
Más portable.
Más opciones
(búsqueda de librerı́as, . . .).
Más fácil de extender.
Final
Introducción
Ejecutando CMake
Ejemplos
Ventajas frente a Makefile y Autotools
CMake Versus Makefile
Más cómodo y fácil.
CMake Versus Autotools
Menor curva de aprendizaje.
¿He dicho que es más fácil?
No usa M4 :-).
Portable.
Más portable.
Más opciones
(búsqueda de librerı́as, . . .).
Más fácil de extender.
Mejor documentado.
Final
Introducción
Ejecutando CMake
Ejemplos
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.
Final
Introducción
Ejecutando CMake
Ejemplos
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/
Final
Introducción
Ejecutando CMake
Ejemplos
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
Final
Introducción
Ejecutando CMake
Ejecutando CMake
Preparar el fichero CMakeLists.txt:
Con editor favorito.
Visualmente: cmake-gui.
Ejecutar cmake . → Makefile
Compilar (make)
Ejemplos
Final
Introducción
Ejecutando CMake
Ejemplos
Ejemplo: “Hello, World”
Estructura
hello src
hello.c
CMakeLists.txt
CMakeLists.txt
PROJECT(hello C)
SET(SRC
hello.c)
ADD EXECUTABLE(hello ${SRC})
Final
Introducción
Ejecutando CMake
Ejemplos
Ejemplo: “Hello, World”
Estructura
hello src
hello.c
CMakeLists.txt
Makefile
CMakeLists.txt
PROJECT(hello C)
SET(SRC
hello.c)
ADD EXECUTABLE(hello ${SRC})
Final
Introducción
Ejecutando CMake
Ejemplos
Ejemplo: “Hello, World”
Estructura
hello src
hello.c
CMakeLists.txt
Makefile
CMakeFiles
CMakeCache.txt
cmake install.cmake
hello
CMakeLists.txt
PROJECT(hello C)
SET(SRC
hello.c)
ADD EXECUTABLE(hello ${SRC})
Final
Introducción
Ejecutando CMake
Ejemplo: “Hello, World”
Estructura
hello src
hello.c
CMakeLists.txt
Makefile
CMakeFiles
CMakeCache.txt
cmake install.cmake
hello → Ejecutable
Ejemplos
Final
Introducción
Ejecutando CMake
Ejemplo: “Hello, World”
Estructura
hello src
hello.c
CMakeLists.txt
Makefile → Fichero autogenerado
CMakeFiles
CMakeCache.txt
cmake install.cmake
hello → Ejecutable
Ejemplos
Final
Introducción
Ejecutando CMake
Ejemplos
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
Final
Introducción
Ejecutando CMake
Ejemplos
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
Final
Introducción
Ejecutando CMake
Ejemplos
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
Final
Introducción
Ejecutando CMake
Ejemplos
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
Final
Introducción
Ejecutando CMake
Ejemplos
Otras versiones
hellolib.c
hello.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>
/∗ h e l l o . c : d i s p l a y a m e s s a g e
on 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”
v o i d g e t m s g ( c h a r ∗msg ) {
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 ) ;
return 0;
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 g e t m s g ( c h a r ∗msg ) ;
#e n d i f
Final
Introducción
Ejecutando CMake
Ejemplos
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 )
Final
Introducción
Ejecutando CMake
Ejemplos
Espero que esta introducción
motive para el taller
¿Empezamos? :-)
Final
Descargar