Представлен релиз кроссплатформенного открытого генератора сценариев сборки CMake 3.17, выступающего в качестве альтернативы Autotools и используемого в таких проектах, как KDE, LLVM/Clang, MySQL, MariaDB, ReactOS и Blender. Код CMake написан на языке C++ и распространяется под лицензией BSD.
CMake примечателен предоставлением простого языка сценариев, средствами расширения функциональности через модули, минимальным числом зависимостей (нет привязки к M4, Perl или Python), поддержкой кэширования, наличием инструментов для кросс-компиляции, поддержкой генерации файлов сборки для широкого спектра систем сборки и компиляторов, наличием утилит ctest и cpack для определения сценариев тестирования и сборки пакетов, утилитой cmake-gui для интерактивной настройки параметров сборки.
Основные улучшения:
- Добавлен новый генератор сборочных сценариев на базе инструментария Ninja — «Ninja Multi-Config», отличающийся от старого генератора возможностью обработки за раз сразу нескольких сборочных конфигураций.
- В генераторе сборочных сценариев для Visual Studio появилась возможность определения файлов с исходными текстами, привязанных к каждой конфигурации (per-config sources).
- В средства для настройки параметров компилятора (Compile Features) добавлена возможность задания мета-параметров для CUDA («cuda_std_03», «cuda_std_14» и т.п).
- Для выбора типа runtime-библиотек при использовании CUDA добавлены переменные «CMAKE_CUDA_RUNTIME_LIBRARY» и «CUDA_RUNTIME_LIBRARY».
- Добавлен модуль «FindCUDAToolkit» для определения доступного в системе инструментария CUDA без включения языка CUDA.
- В утилиту cmake добавлена команда «—debug-find» для вывода дополнительной читаемой диагностики при выполнении операций поиска. Для аналогичных целей добавлена переменная CMAKE_FIND_DEBUG_MODE.
- В модуль «FindCURL» добавлена поддержка поиска инструментария CURL при помощи генерируемых cmake файлов конфигурации «CURLConfig.cmake». Для отключения указанного поведения предусмотрена переменная CURL_NO_CURL_CMAKE.
- В модуль FindPython добавлена возможность поиска компонентов Python в виртуальных окружениях, управляемых при помощи «conda».
- В утилиту ctest добавлены опции «—no-tests=[error|ignore]» для определения поведения в случае отсутствия тестов и «—repeat» для задания условий повторного запуска тестов (until-pass, after-timeout).
- Свойства сборочной цели INTERFACE_LINK_OPTIONS, INTERFACE_LINK_DIRECTORIES и INTERFACE_LINK_DEPENDS теперь переносятся в числе внутренних зависимостей статически собираемых библиотек.
- По умолчанию отключён поиск DLL-файлов командой find_library() при использовании инструментария MinGW (вместо этого по умолчанию осуществляется попытка импортирования библиотек «.dll.a»).
- Логика выбора утилиты ninja в генераторе Ninja теперь не зависит от названия исполняемого файла — используется первая утилита ninja-build, ninja или samu, найденная в путях, определённых через переменную окружения PATH.
- В утилиту cmake добавлена команда «-E rm», которую можно использовать для удаления каталогов и файлов вместо раздельных команд «-E remove» и «-E remove_directory».
Источник: http://www.opennet.ru/opennews/art.shtml?num=52585