Состоялся (https://blog.kitware.com/cmake-ups-support-for-popular-progr.../) релиз кроссплатформенного открытого генератора сценариев сборки CMake 3.8 (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.8/release/3.8.html#new-features):
- Добавлена поддержка сборки проектов на языке CUDA через генераторы Makefile и Ninja для Linux, macOS и Windows;
- Добавлена поддержка сборки проектов на языке C# через генератор сценариев сборки для Visual Studio;
- В средствах для настройки параметров компилятора (Compile Features) реализована возможность определения мета-флагов, которые изменяют режим работы компилятора в привязке к специфичным языковым стандартам, например, "cxx_std_11" для C++ 11;
- "Compile Features" теперь учитывает особенности стандарта C++ 17, но набор мета-флагов "cxx_std_17" для него пока остаётся пустым;- В "Compile Features" добавлена поддержка особенностей компиляторов Intel C++ версий с 12.1 по 17.0 для UNIX и Windows;
- В генераторы сценариев сборки для Visual Studio 2013+
в блок "CMAKE_GENERATOR_TOOLSET" добавлена поддержка опции "host=x64" для указания использования 64-разрядного инструментария на 64-разрядных системах;- В генераторах для Visual Studio обеспечен импорт в генерируемый проект файлов MSBuild через передачу в target_link_libraries() файлов с расширением .targets;
- В команду try_compile() добавлена опция для выбора языкового стандарта, который будет использоваться в генерируемом тестовом проекте. В try_compile() также теперь учитывается переменная окружения CMAKE_CXX_STANDARD;
- Добавлено свойство "BUILD_RPATH" и связанная с ним переменная "CMAKE_BUILD_RPATH", позволяющие указать собственный путь RPATH для сохранения исполняемых файлов в процессе сборки;
- Добавлено новое выражение генератора "$‹IF:cond,true-value,false-value ›", возвращающее значение "true-value", если условие "cond" истинно (1) или "false-value" - ложно (0);
- В свойство "COMPILE_FLAGS" добавлена поддержка выражений генератора.
URL: https://blog.kitware.com/cmake-ups-support-for-popular-progr.../
Новость: http://www.opennet.me/opennews/art.shtml?num=46363
Полезная инфа по CMake:
>https://github.com/toeb/moderncmake/blob/master/sample03/CMa...
>https://github.com/toeb/moderncmake/blob/master/sample03/ext...Ясно, понятно.
https://github.com/toeb/moderncmake/raw/master/Modern%2...
> https://github.com/toeb/moderncmake/raw/master/Modern%2...У модного паренька нет правильной ссылки/хостилки http://thetoeb.de/2016/08/30/modern-cmake-presentation/ с человечим Content-Type: application/pdf или как там, а не даунлоадом или веб-ещё-0 ги-хаба или гу-дока? ...."Ясно, понятно."
> "Compile Features" теперь учитывает особенности стандарта C++ 17, но набор мета-флагов "cxx_std_17" для него пока остаётся пустым;Какое дело системе сборки до специфичных флагов компилятора?
> Какое дело системе сборки до специфичных флагов компилятора?Ты не поверишь -- система сборки генерирует мэйкфайлы, которые будут вызывать компиляторы со специфичными флагами.
>Если не дошло, то разъясню: специфичные флаги компилятору --- прерогатива автора. И должны указываться автором. Для передачи флагов CMAKE_C_FLAGS вполне достаточно. Не дело сборочной системы совать [специфичные] флаги по своему усмотрению, а именно эту попытку я и подозреваю.
Это так, если вы хотите затачивать ваши сценарии подо все компиляторы на свете. А кто-то просто хочет сказать "включить C++14", а система сборки должна сама понять, что нужно подсунуть конкретному компилятору, чтобы выполнить это требование.
> Это так, если вы хотите затачивать ваши сценарии подо все компиляторы на
> должна сама понять, что нужно подсунуть конкретному компилятору, чтобы выполнить этоАвтокрэп не нужон, говорили https://xkcd.com/927/ они...
Кто говорил?
Когда-то был нужен, сейчас его заменил CMake.
> Когда-то был нужен, сейчас его заменил CMake.Это точно ;) --- cmake реализует идеи аналогичные autotools и порождает проблемы, аналогичные проблемам autotools.
Он пока не добрался до уровня крапа вроде libtool; и авторы, использующие CMake нечасто тащат такое чудесное чудо как glib. Собственно, пока это и уменьшает проблемность.
да ваще, жуть! а месье знает что-нибудь лучше? или может сам сделал что-нибудь лучше?
> да ваще, жуть! а месье знает что-нибудь лучше? или может сам сделал что-нибудь лучше?Да.
Примеры в студию.
> Примеры в студию.А площадка-то соответствует?
А это и не важно. Вы утверждаете, что знаете или сделали лучше. Предоставьте доказательства.
Meson
Спасибо за ссылку, но здесь я сильно расхожусь с авторами meson уже на уровне целеполагания.
>>> Meson is also available in the Python Package Index and can be installed with pip3 install meson.На помойку ибо не взлетит. Кросплатформленная система сборки не должна зависеть от этого http://i.imgur.com/W5Nx6qg.png
> На помойку ибо не взлетит. Кросплатформленная система сборки не должна зависеть от
> этого http://i.imgur.com/W5Nx6qg.pngСтранно, я собирал готовый пакет на тридцатник.
Стольник - это если включить тесты, ИДЕ, доки. Я понимаю, что "С:\" по ссылке уже намекает, но это ж из какого места должны расти руки, чтобы раздуть все это до 780МБ?
>> На помойку ибо не взлетит. Кросплатформленная система сборки не должна зависеть от
>> этого http://i.imgur.com/W5Nx6qg.png
> Странно, я собирал готовый пакет на тридцатник.
> Стольник - это если включить тесты, ИДЕ, доки. Я понимаю, что "С:\"
> по ссылке уже намекает, но это ж из какого места должны
> расти руки, чтобы раздуть все это до 780МБ?У разработчиков питона нужно спросить.
Поставьте себе уже человеческую ОСь.
ЗЫ
* dev-lang/python-2.7.13
Total files : 4548
Total size : 66.50 MiB
* dev-lang/python-3.4.6
Total files : 5133
Total size : 80.20 MiB
* dev-lang/python-3.6.1
Total files : 6907
Total size : 101.17 MiB
>[оверквотинг удален]
> Total files :
> 5133
> Total size
> : 80.20 MiB
> * dev-lang/python-3.6.1
> Total files :
> 6907
> Total size
> : 101.17 MiB
>Cross-platform
чем эта поделка принципиально лучше cmake?
И она автоматом подключит для винд гoвнoпpиложeние "K" про "безопасные строки".
> специфичные флаги компилятору --- прерогатива автораКак расшифровывается буковка C в слове cmake, ты, видимо, не в курсе?
Автор не знает заранее, каким компилятором будет собираться код, и какие специфичные флаги этот компилятор понимает. Подставить эти флаги — дело как раз системы сборки. И делает она это, разумеется, не по своему усмотрению, а на основании значения переменной CMAKE_CXX_STANDARD и/или CMAKE_CXX_STANDARD_REQUIRED, которую устанавливает как раз таки автор.
Как включить в кроссплатформенном проекте поддержку C++14, например?
> CMake примечателен предоставлением простого языка сценариевДа, язык там знатный. Ознакомившись с ним, выбрал autotools.
У autotools-то всё зашибок с синтаксисом, ага. Чудесные макросы, чудесный выхлоп Makefile, - всё замечательно!
на БАСИК похож же)
M4 чувак!!! Застрелиться.
Анон который не смог в M4 - не анон.1337
Не анон тот, кто смог М4 и... ему понравилось.
Hint: прежде чем выбирать какой-то инструмент, ознакомься с _этим_ инструментом, а не с конкурирующим.
лучше посмотри на Ninja
лучше посмотри на цмейк, паря. https://cmake.org/cmake/help/latest/manual/cmake-generators....The cmake(1) command-line tool --help output lists available generators on the current platform.
...
Ninja
...
Кто-нибудь знает область применения $‹IF:cond,true-value,false-value ›? Не совсем понятно, для чего это сделано.
Вероятно, для передачи значений сторонним системам сборки и прочим программам, в которых булевый тип имеет представление значений не такое как cmakeTrue/False
1/0
Enable/Disable