Я пока что не видел проектов в которых конфигурация занимает слишком много времени. Вот autotools конечно может минуты заниматься бесполезными для современных *nix вещами, но у CMake такого нет.
Лучше бы этого кеша вообще не было, на моей памяти с ним было больше проблем, чем решенных проблем.
Я CMake не использую третий год и уже не могу вспомнить таких подробностей. Сорян, можешь забыть про это.
Зато я вспомнил что меня в нём ещё разочаровывает. Отсутствие автогенерируемого хелпа. С одной стороны CMake все опции сборки знает благодаря option(), но с другой стороны он ничего полезного с ними не делает.
Вот waf мне такое предлагает просто из коробки: https://paste.ubuntu.com/p/9zpZYdr2b2/. Немного сгруппировано так себе, но в целом над этим можно работать и главное это есть.
На практике выхлоп автотулзов запускается на всех юникс-подобных архитектурах, какие остались в ходу
Напоминаю, что bash/sh сами по себе ничего не умеют. Да, можно поставить и на винду, и на мак базовые никсовые утилиты, и таки запустить автотулзы. Если очень нужно. В противном случае никто не напишет кроссплатформу на автотулзах. Сейчас вон гугл для новой мобильной платформы готовит ось без форка и сигналов — вот там-то все автотулзы и отправятся в утиль.
1. Можно проверить существование переменной 6. Ну под каждую платформу есть свои команды - тут согласен. Хотя бывает, что можно обойтись
Можно написать свою собственную систему сборки — как и сделал альбатрос. Только зачем тогда нужен был CMake изначально? Об этом и вопрос — он тупо лишнее звено здесь, ты в итоге все равно напишешь свою собственную конфигурялку на питоне или баше.
Можно вызывать во втором случае так: cmake . -DSDL=no
У CMake абсолютно кривое поведение кэша. То, что теоретически проблема решаема, не оправдывает тот факт, что тебе придется провести два часа в отладке алгоритма сборки мелкой либы. И конкретно SDL в этом плане отличается стабильным выносом мозгов, по поводу и без повода.
3. Не знаю куда ещё подробнее. Аргументы разделяются пробелом. В этом и проблема
Проблема даже не в том, что они разделяются пробелом, а то, что этот факт никак не встроен в остальной язык, из-за чего при простой передаче параметризированных аргументов ты никогда не можешь угадать, сколько аргументов получит функция. В итоге написание надежной конфигурялки для CMake превращается в исключительно тяжелую задачу, пусть и теоретически возможную.
Мак активно уходит от жопоеля. Конечно, им приятно иметь некоторую совместимость с наследием. Более того, даже винда имеет некоторую степень никсовой совместимости. И, тем не менее, довольно активно уходит от этого старья.
Сейчас вон гугл для новой мобильной платформы готовит ось без форка и сигналов — вот там-то все автотулзы и отправятся в утиль.
Вы про кросс-компиляцию слышали что-нибудь? Думаете, что Андроид студия запускается нативно на телефоне
Я писал про тенденции. Так-то эту новую ось (которая не андроид) гугл еще не выпустил. Позиция автотулз адептов в этом плане проста, и похожа на позицию создателей CMake: авось вся индустрия прогнется, чтобы поддержать наш инструмент. Уже даже на винде есть более одного способа сборки автотулзом. Что не отменяет того факта, что автотулз — говно мамонта, и родные виндовые приложения не соберет.
Так активно уходит, что прибежали с ванильной неюниксовой макоси, попутно еще потратив время на сертификацию.
Вот возьмут завтра и половину юзерленда перепишут, чтобы на LOR пользователю byko3y спокойнее жилось без форка.
Комменты на ЛОРе:
Я писал про тенденции. Так-то эту новую ось (которая не андроид) гугл еще не выпустил. Позиция автотулз адептов в этом плане проста, и похожа на позицию создателей CMake: авось вся индустрия прогнется, чтобы поддержать наш инструмент. Уже даже на винде есть более одного способа сборки автотулзом. Что не отменяет того факта, что автотулз — говно мамонта, и родные виндовые приложения не соберет.
С другой стороны – Python-зоопарк и ахинея 2to3 тоже не лучше, хотя вторая ветка потихоньку отмирает, слава и позор Гвидо.
В смысле? Тащитть сраное легаси годами – это и есть позор всего IT-мира включая железо. Ну буть ты мужиком, дропни поддрежку старого барахла – нет, плюшкинство во всём. Виде-те ли палеозойский хелловорд перестанет работать. Да кому не похер?
CMake срёт в опции компилятора флагами -mthumb -marm, а компилятор крутит пальцем у виска и выкидывает взаимоисключающие параметры. На честном слове оно как-то работает и собирается.
При этом у Android NDK был весьма крутой фреймворк с использованием Makefile’ов на стероидах. Эти пресловутые файлики Android.mk, там всё было продумано и деларативно размечалось:
Ага, фантастический уровень сборки: выкачать архивы и распаковать.
Архив это архив, а пекет – это пакет. Нюхни C/C++ другой ноздрёй.
Это не сборка, а управление пакетами.
Управление пакетами, это когды ты в ближайшем ларьке пиво берёшь, происходит, возле кассы. А тут речь о сборке этого пакета. Даже еси основную часть нужно делать руками, это сборкой и остаётся.
А что, самый популярный и известный среди разработчиков софт на Python – Mercurial уже переписали на Python 3?
Так Ртуть же загнулась (туда и дорога). От неё даже в bitbucket отказались. Единственное полезное, что она делала – это тащила Иксы в зависимостях по умолчанию на Убунту-сервере, поджигая пуканы. Зато сколько мамкиных сисадминов узнало о –no-install-recommends…
P.S.: по мне так, если код не выживает в изменяющихя условиях – то пусть мрёт. Эволюионный проесс. Фишка как раз в том, что и форсирование обновления и отмираение должно иметь свои границы. А пока границы не обговорены – то и раговор иначе чем пустым не получиться, уж извиняйте.
В той команде я привел только то, как изменить требуемую переменную.
А если флагов уйма?
Ну я обычно при конфигурировании всегда указываю требуемые флаги явно. А при переконфигурировании только те, которые нужно изменить. По моему - это логичное поведение cmake.
Чтобы сконфигурировать на месоне что-то сложнее хелло ворлда, нужно писать к нему скрипты на баше.
Если для конфигурации вам нужен Тьюринг-полный язык и скрипты на Bash, то вы делаете что-то не так. Не надо оправдывать криворукость сложностью. Огромные проекты собирают примитивной системой сборки. Даже проектов IDE часто достаточно.
Проблема с CMake в том, что они обосрались в своих обещаниях и пошли обратно, перестали поставлять Find-модули, хотя изначально поставляли.
Эти костыли надо вообще все выкинуть и заменить на давно везде работающий (включая BSD и Haiku) pkg-config. Не понимаю зачем их держат, неужели ещё есть библиотеки, которые нельзя добавить в pkg-config?
Кэш в CMake это единственный способ сделать документированную пользовательскую точку настройки. Другими словами, если в скрипте переменная set(MyVar), то на её значение извне повлиять нельзя. Если в скрипте переменная set(MyVar CACHE), или option(MyVar), что то же самое, то пользователь может задать её извне через cmake -D или графический фронтенд.
Эта проблема преувеличена. Всегда можно положить в состав пакета библиотеку требуемой версии и настроить через RPATH линковку с ней, а не с той, что лежит в системе.
Попробовал cmake -LAH. Его только грепать в поисках необходимого, потому что наполовину он забит переменными самого CMake. И по группам деления нет. Удобно!