Libro de recetas de CMake
Este repositorio recopila fuentes de las recetas contenidas en el CMake Cookbook publicado por Packt y escrito por Radovan Bast y Roberto Di Remigio.
Tabla de contenido
Capítulo 1: De un ejecutable simple a bibliotecas
- 1. Compilar un único archivo fuente en un ejecutable
- 2. Cambiar de generador
- 3. Crear y vincular bibliotecas estáticas y compartidas
- 4. Controlar la compilación con condicionales
- 5. Presentar opciones al usuario.
- 6. Especificación del compilador
- 7. Cambiar el tipo de construcción
- 8. Controlar los indicadores del compilador
- 9. Estableciendo el estándar para el idioma
- 10. Uso de construcciones de flujo de control
Capítulo 2: Detección del entorno
- 1. Descubriendo el sistema operativo
- 2. Manejo del código fuente dependiente de la plataforma
- 3. Manejo del código fuente dependiente del compilador
- 4. Descubriendo la arquitectura del procesador host
- 5. Descubrir el conjunto de instrucciones del procesador host
- 6. Habilitación de la vectorización para la biblioteca Eigen
Capítulo 3: Detección de bibliotecas y programas externos
- 1. Detectando el intérprete de Python
- 2. Detectando la biblioteca Python
- 3. Detección de módulos y paquetes de Python
- 4. Detección de las bibliotecas matemáticas BLAS y LAPACK
- 5. Detección del entorno paralelo OpenMP
- 6. Detección del entorno paralelo MPI
- 7. Detección de la biblioteca Eigen
- 8. Detección de las bibliotecas Boost
- 9. Detección de bibliotecas externas: I. Usando
pkg-config
- 10. Detección de bibliotecas externas: II. Escribir un módulo de búsqueda
Capítulo 4: Creación y ejecución de pruebas
- 1. Crear una prueba unitaria simple
- 2. Definición de una prueba unitaria utilizando la biblioteca Catch2
- 3. Definir una prueba unitaria y vincularla con la prueba de Google
- 4. Definición de una prueba unitaria y vinculación con la prueba Boost
- 5. Uso de análisis dinámico para detectar defectos de memoria.
- 6. Prueba de fallas esperadas
- 7. Usar tiempos de espera para pruebas largas
- 8. Ejecución de pruebas en paralelo
- 9. Ejecutar un subconjunto de pruebas.
- 10. Uso de accesorios de prueba
Capítulo 5: Operaciones en tiempo de configuración y tiempo de construcción
- 1. Uso de operaciones de archivos independientes de la plataforma
- 2. Ejecutar un comando personalizado en el momento de la configuración
- 3. Ejecutar un comando personalizado en el momento de la compilación: I. Usar
add_custom_command
- 4. Ejecutar un comando personalizado en el momento de la compilación: II. Usando
add_custom_target
- 5. Ejecutar comandos personalizados para objetivos específicos en el momento de la compilación
- 6. Compilación y vinculación del sondeo
- 7. Sondeo de indicadores del compilador
- 8. Ejecución del sondeo
- 9. Configuración de ajuste y compilación con expresiones generadoras.
Capítulo 6: Generación de código fuente
- 1. Generando fuentes en el momento de la configuración
- 2. Generar código fuente en el momento de la configuración usando Python
- 3. Generar código fuente en el momento de la compilación usando Python
- 4. Registro de la información de la versión del proyecto para su reproducibilidad.
- 5. Grabar la versión del proyecto desde un archivo.
- 6. Grabar el hash de Git en el momento de la configuración
- 7. Grabar el hash de Git en el momento de la compilación
Capítulo 7: Estructuración de Proyectos
- 1. Reutilización de código con funciones y macros
- 2. Dividir las fuentes de CMake en módulos
- 3. Escribir una función para probar y configurar indicadores del compilador
- 4. Definir una función o macro con argumentos con nombre
- 5. Redefiniendo funciones y macros
- 6. Desuso de funciones, macros y variables
- 7. Limitar el alcance con
add_subdirectory
- 8. Evitar variables globales usando
target_sources
- 9. Organización de proyectos Fortran
Capítulo 8: El patrón de superconstrucción
- 1. Usando el patrón de superconstrucción
- 2. Gestionar dependencias con una supercompilación: I. Las bibliotecas Boost
- 3. Gestión de dependencias con superedificación: II. La biblioteca FFTW
- 4. Gestión de dependencias con superedificación: III. El marco de prueba de Google
- 5. Gestionar tu proyecto como una superconstrucción
Capítulo 9: Proyectos en idiomas mixtos
- 1. Creación de proyectos Fortran que utilizan bibliotecas C/C++
- 2. Creación de proyectos C/C++ que utilizan bibliotecas Fortran
- 3. Construyendo proyectos C++ y Python usando Cython
- 4. Construyendo proyectos de C++ y Python usando Boost.Python
- 5. Construyendo proyectos de C++ y Python usando pybind11
- 6. Mezclar C, C++, Fortran y Python usando Python CFFI
Capítulo 10: Escribir un instalador
- 1. Instalando tu proyecto
- 2. Generar encabezados de exportación
- 3. Exportar tus objetivos
- 4. Instalación de una superconstrucción
Capítulo 11: Proyectos de embalaje
- 1. Generar paquetes fuente y binarios
- 2. Distribuir un proyecto C++/Python creado con CMake/pybind11 a través de PyPI
- 3. Distribuir un proyecto C/Fortran/Python creado con CMake/CFFI a través de PyPI
- 4. Distribuir un proyecto simple como paquete Conda
- 5. Distribuir un proyecto con dependencias como paquete Conda
Capítulo 12: Documentación de construcción
- 1. Documentación de creación con Doxygen
- 2. Creación de documentación con Sphinx
- 3. Combinando Doxygen y Sphinx
Capítulo 13: Generadores alternativos y compilación cruzada
- 1. Ejemplo de compilación cruzada de hola mundo
- 2. Compilación cruzada de un binario de Windows con paralelización OpenMP
Capítulo 14: Prueba de paneles
- 1. Implementación de pruebas en el panel de CDash
- 2. Informar la cobertura de la prueba al panel de CDash
- 3. Usar AddressSanitizer e informar defectos de memoria a CDash
- 4. Usar ThreadSanitizer y reportar carreras de datos a CDash
Capítulo 15: Portar un proyecto a CMake