Доступен (https://blog.kitware.com/cmake-3-12-0-available-for-download/) релиз кроссплатформенного открытого генератора сценариев сборки CMake 3.12 (http://www.cmake.org/), выступающего в качестве альтернативы Autotools и используемого в таких проектах, как KDE, LLVM/Clang, MySQL, MariaDB, ReactOS и Blender. Код CMake написан на языке C++ и распространяется под лицензией BSD.CMake примечателен предоставлением простого языка сценариев, средствами расширения функциональности через модули, минимальным числом зависимостей (нет привязки к M4, Perl или Python), поддержкой кэширования, наличием инструментов для кросс-компиляции, поддержкой генерации файлов сборки для широкого спектра систем сборки и компиляторов, наличием утилит ctest и cpack для определения сценариев тестирования и сборки пакетов, утилитой cmake-gui для интерактивной настройки параметров сборки.
Основные улучшения (https://cmake.org/cmake/help/v3.12/release/3.12.html):
- Команда target_link_libraries() теперь может использоваться для
библиотек объектных файлов (Object Libraries);- В команды file(GLOB) и file(GLOB_RECURSE) добавлен флаг CONFIGURE_DEPENDS, которые позволяет обрабатывать зависимости системы сборки в процессе перебора содержимого каталогов;
- Средства для настройки параметров компилятора (Compile Features) теперь учитывают особенности стандарта C++ 20, но набор мета-флагов "cxx_std_20" пока остаётся пустым;
- В генераторы для Visual Studio 2017 в CMAKE_GENERATOR_TOOLSET добавлена поддержка опции "version=14.##" для явного выбора версии инструментария;
- В режим сборки (cmake --build) добавлена опция "--parallel [jobs]" ("-j [jobs]") для определения числа параллельно запускаемых сборочных процессов;- Добавлена команда add_compile_definitions() для указания конструкций препроцессора, применяемых для текущего уровня иерархии каталогов;
- В команды cmake_minimum_required() и cmake_policy(VERSION) добавлена возможность указания диапазонов версий в форме "min...max";
- В команде find_package() обеспечена поддержка поиска префикса, указанного в параметре или переменной окружения PackageName_ROOT;
- Добавлены новые выражения генератора "$‹GENEX_EVAL:…›", "$‹TARGET_GENEX_EVAL:target,…›", "$‹TARGET_EXISTS:…›" и "$‹TARGET_NAME_IF_EXISTS:…›";
- В модулях FindCURL, FindALSA, FindLibXml2 и FindJPEG обеспечена установка флагов импортирования (https://cmake.org/cmake/help/v3.12/prop_tgt/IMPORTED.html);- Добавлен модуль FindODBC для поиска библиотеки ODBC (Open Database
Connectivity);
- Добавлены модули FindPython, FindPython3 и FindPython2 для определения наличия окружений для выполнения скриптов на языке Python.URL: https://blog.kitware.com/cmake-3-12-0-available-for-download/
Новость: https://www.opennet.me/opennews/art.shtml?num=48979
FindPython3! Наконец, решится старая проблема с нахождением второго питона при поиске третьей версии из-за того, что другой подкаталог искал вторую версию...
В мире С/CPP во всем такая же жесть, как и в сборке?
этот мир не для сказочных принцесс. можешь не красоваться - не оценят.
Последний раз как я смотрел у С все хорошо с их Makefile-ами, это C++-шники как напридумывают усложнений а потом их ещё сложнее делают и чтобы компилировалось по часу.
> В мире С/CPPПрочитал как "В мире СССР"
Держи нас в курсе всех твоих случаев неверного восприятия тех или иных букв
> В режим сборки (cmake --build) добавлена опция "--parallel [jobs]" ("-j [jobs]")Джва года этого ждал. Заколебался выставлять переменную оружения MAKEFLAGS или как она там называется, для того, чтобы собираемые мейком сборки собирались параллельно
Еще бы прикрутили что-нибудь типа -j auto, чтобы раскрывалось в значение ядер в процессоре, чтобы не приходилось это число рассчитывать внешними скриптами или хардкодить наобум
-j `nproc`не благодари
> -j `nproc`
> не благодариЗа что?
$ nproc
bash: nproc: command not found
$ gnproc
32
ты перепутал с тильдой через шифт
> ты перепутал с тильдой через шифтНет.
> -j `nproc`
> не благодариЗа что благодарить, если вот так и начинает расползаться без нужды довольно-таки новодел, а потом сиди и патчи в любой ситуации на полшага в сторону?
Одни неосиляторы документации костылят свои виндосистемы сборки, другие потом ещё и их обкостыливают, потому что ни -j, ни тем более -l не удосужились сделать ещё вместе с открытием того, что сборки могут быть параллельными...
Да вроде и до этого работало
cmake --build -- -j 8
Где-то у меня с этим были проблемы. Вроде не получалось так использовать кроссплаьформеннон - под виндой msbuild ругался на непонятный параметр.
sudo apt install ninja-build
cmake <path> -GNinja
ninja
И что? человеку нужно по какой-то причине вызывать cmake фронтенд. Он и без ниндзи может точно так же вызывать make -j, разницы-то?
Допустим у человека скрипты, которые в зависимости от конфига собирают ninja/msbuild/xcodebuild. не будет он же в батниках if-ы делать под каждую систему? В каком-то случае cmake --build может быть удобен (другого кейса для этой херни я придумать не могу)
> В команды cmake_minimum_required() и cmake_policy(VERSION) добавлена возможность указания диапазонов версий в форме "min...max";Как должны быть упорядочены по возрастанию версии 1.2.3 и 2.0.1?
2 > 1. Все просто (будь там хоть 1.99.98)
https://semver.org/
Ничего, что они тщательно обошли сравнение 1.2.3 ~ 2.0.1? Нотация semantic versioning образует слабо упорядоченное множество в котором отношение предшествования определено не для любой пары.
Наркоман штоли?"Precedence is determined by the first difference when comparing each of these identifiers from left to right as follows: Major, minor, and patch versions are always compared numerically"
> Добавлен модуль FindODBC для поиска библиотеки ODBC (Open Database Connectivity);да блин неужели же...