Поваренная книга CMake
В этом репозитории собраны исходные коды рецептов, содержащихся в кулинарной книге CMake, опубликованной Packt и авторами которой являются Радован Баст и Роберто Ди Ремиджио.
Оглавление
Глава 1: От простого исполняемого файла к библиотекам
- 1. Компиляция одного исходного файла в исполняемый файл.
- 2. Импульсные генераторы
- 3. Создание и связывание статических и общих библиотек.
- 4. Управление компиляцией с помощью условных выражений
- 5. Представление вариантов пользователю
- 6. Указание компилятора
- 7. Переключение типа сборки
- 8. Управление флагами компилятора
- 9. Установление стандарта языка
- 10. Использование конструкций потока управления
Глава 2: Обнаружение окружающей среды
- 1. Обнаружение операционной системы
- 2. Работа с исходным кодом, зависящим от платформы
- 3. Работа с исходным кодом, зависящим от компилятора
- 4. Знакомство с архитектурой хост-процессора
- 5. Обнаружение набора команд хост-процессора
- 6. Включение векторизации для библиотеки Eigen.
Глава 3: Обнаружение внешних библиотек и программ
- 1. Обнаружение интерпретатора Python
- 2. Обнаружение библиотеки Python
- 3. Обнаружение модулей и пакетов Python
- 4. Обнаружение математических библиотек BLAS и LAPACK.
- 5. Обнаружение параллельной среды OpenMP
- 6. Обнаружение параллельной среды MPI
- 7. Обнаружение собственной библиотеки
- 8. Обнаружение библиотек Boost
- 9. Обнаружение внешних библиотек: I. Использование
pkg-config
- 10. Обнаружение внешних библиотек: II. Написание find-модуля
Глава 4. Создание и запуск тестов
- 1. Создание простого модульного теста
- 2. Определение модульного теста с использованием библиотеки Catch2.
- 3. Определение модульного теста и его связывание с Google Test.
- 4. Определение модульного теста и его связывание с тестом Boost
- 5. Использование динамического анализа для обнаружения дефектов памяти
- 6. Тестирование ожидаемых сбоев
- 7. Использование таймаутов для длительных тестов
- 8. Параллельное выполнение тестов
- 9. Запуск подмножества тестов
- 10. Использование тестовых приспособлений
Глава 5. Операции во время настройки и сборки
- 1. Использование файловых операций, не зависящих от платформы.
- 2. Запуск пользовательской команды во время настройки
- 3. Запуск пользовательской команды во время сборки: I. Использование
add_custom_command
- 4. Запуск специальной команды во время сборки: II. Использование
add_custom_target
- 5. Запуск пользовательских команд для конкретных целей во время сборки
- 6. Пробная компиляция и компоновка
- 7. Проверка флагов компилятора
- 8. Проверка выполнения
- 9. Точная настройка конфигурации и компиляция с использованием выражений генератора
Глава 6: Генерация исходного кода
- 1. Генерация источников во время настройки
- 2. Генерация исходного кода во время настройки с использованием Python
- 3. Генерация исходного кода во время сборки с использованием Python
- 4. Запись информации о версии проекта для воспроизводимости.
- 5. Запись версии проекта из файла
- 6. Запись хеша Git во время настройки
- 7. Запись хеша Git во время сборки
Глава 7: Структурирование проектов
- 1. Повторное использование кода с функциями и макросами
- 2. Разделение исходников CMake на модули
- 3. Написание функции для тестирования и установки флагов компилятора
- 4. Определение функции или макроса с именованными аргументами
- 5. Переопределение функций и макросов
- 6. Устаревшие функции, макросы и переменные
- 7. Ограничение области действия с помощью
add_subdirectory
- 8. Как избежать использования глобальных переменных с помощью
target_sources
- 9. Организация проектов на Фортране
Глава 8: Шаблон Superbuild
- 1. Использование шаблона суперсборки
- 2. Управление зависимостями с помощью суперсборки: I. Библиотеки Boost
- 3. Управление зависимостями с помощью суперсборки: II. Библиотека FFTW
- 4. Управление зависимостями с помощью суперсборки: III. Платформа Google Test
- 5. Управление вашим проектом как суперстройкой
Глава 9: Проекты на нескольких языках
- 1. Создание проектов на Фортране с использованием библиотек C/C++.
- 2. Создание проектов C/C++ с использованием библиотек Fortran.
- 3. Создание проектов C++ и Python с использованием Cython
- 4. Создание проектов C++ и Python с использованием Boost.Python
- 5. Создание проектов C++ и Python с использованием pybind11.
- 6. Смешивание C, C++, Fortran и Python с помощью Python CFFI
Глава 10: Написание установщика
- 1. Установка вашего проекта
- 2. Создание заголовков экспорта
- 3. Экспорт ваших целей
- 4. Установка супербилда
Глава 11: Упаковка проектов
- 1. Генерация исходных и бинарных пакетов
- 2. Распространение проекта C++/Python, созданного с помощью CMake/pybind11, через PyPI.
- 3. Распространение проекта C/Fortran/Python, созданного с помощью CMake/CFFI, через PyPI.
- 4. Распространение простого проекта в виде пакета Conda.
- 5. Распространение проекта с зависимостями в виде пакета Conda.
Глава 12: Строительная документация
- 1. Сборка документации с использованием Doxygen
- 2. Сборка документации с использованием Sphinx
- 3. Объединение Doxygen и Sphinx
Глава 13: Альтернативные генераторы и кросс-компиляция
- 1. Кросс-компиляция примера hello world
- 2. Кросс-компиляция двоичного файла Windows с распараллеливанием OpenMP.
Глава 14: Тестирование информационных панелей
- 1. Развертывание тестов на панели управления CDash.
- 2. Отчет о покрытии тестами на панели управления CDash.
- 3. Использование AddressSanitizer и сообщение о дефектах памяти в CDash.
- 4. Использование ThreadSanitizer и отчет о гонках данных в CDash.
Глава 15. Портирование проекта в CMake