LINUX.ORG.RU

Ответ на: комментарий от a1batross
  1. Ну тут конечно было бы удобно, чтобы оно крашилось, но пока только предварительная проверка.

  2. Кэш нужен для того, чтобы не переконфигурировать все заново, когда поменялся маленький кусочек в иерархии CMakeList.txt-ов.

  3. Т.е. проблема, когда есть аргументы строки с пробельными символами? Можешь привести пример?

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

Кэш нужен для того, чтобы не переконфигурировать все заново, когда поменялся маленький кусочек в иерархии CMakeList.txt-ов.

Так а толку-то то от такого кэша, который начинает обладать гетерогенностью?

EXL ★★★★★
()
Ответ на: комментарий от rumgot
  1. Я пока что не видел проектов в которых конфигурация занимает слишком много времени. Вот autotools конечно может минуты заниматься бесполезными для современных *nix вещами, но у CMake такого нет.

Лучше бы этого кеша вообще не было, на моей памяти с ним было больше проблем, чем решенных проблем.

  1. Я CMake не использую третий год и уже не могу вспомнить таких подробностей. Сорян, можешь забыть про это.

Зато я вспомнил что меня в нём ещё разочаровывает. Отсутствие автогенерируемого хелпа. С одной стороны CMake все опции сборки знает благодаря option(), но с другой стороны он ничего полезного с ними не делает.

Вот waf мне такое предлагает просто из коробки: https://paste.ubuntu.com/p/9zpZYdr2b2/. Немного сгруппировано так себе, но в целом над этим можно работать и главное это есть.

a1batross ★★★★★
()

Зачем нам пакетный менеджер? У нас нет времени разбираться с ним. Лучше таскать с собой три гига вендоренных зависимостей. Деды таскали.

anonymous
()
Ответ на: комментарий от anonymous

Неправильные, вендузячие деды.

anonymous
()
Ответ на: комментарий от wandrien

На практике выхлоп автотулзов запускается на всех юникс-подобных архитектурах, какие остались в ходу

Напоминаю, что bash/sh сами по себе ничего не умеют. Да, можно поставить и на винду, и на мак базовые никсовые утилиты, и таки запустить автотулзы. Если очень нужно. В противном случае никто не напишет кроссплатформу на автотулзах. Сейчас вон гугл для новой мобильной платформы готовит ось без форка и сигналов — вот там-то все автотулзы и отправятся в утиль.

byko3y ★★★★
()
Ответ на: комментарий от rumgot

1. Можно проверить существование переменной
6. Ну под каждую платформу есть свои команды - тут согласен. Хотя бывает, что можно обойтись

Можно написать свою собственную систему сборки — как и сделал альбатрос. Только зачем тогда нужен был CMake изначально? Об этом и вопрос — он тупо лишнее звено здесь, ты в итоге все равно напишешь свою собственную конфигурялку на питоне или баше.

Можно вызывать во втором случае так: cmake . -DSDL=no

У CMake абсолютно кривое поведение кэша. То, что теоретически проблема решаема, не оправдывает тот факт, что тебе придется провести два часа в отладке алгоритма сборки мелкой либы. И конкретно SDL в этом плане отличается стабильным выносом мозгов, по поводу и без повода.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Да, можно поставить и на винду, и на мак базовые никсовые утилиты, и таки запустить автотулзы.

На маке всё из коробки есть и автотулзы тоже из коробки работают

Harald ★★★★★
()
Ответ на: комментарий от byko3y

В противном случае никто не напишет кроссплатформу на автотулзах.

Биткоин вон написали, весь мир пользуется

Harald ★★★★★
()
Ответ на: комментарий от a1batross

3. Не знаю куда ещё подробнее. Аргументы разделяются пробелом. В этом и проблема

Проблема даже не в том, что они разделяются пробелом, а то, что этот факт никак не встроен в остальной язык, из-за чего при простой передаче параметризированных аргументов ты никогда не можешь угадать, сколько аргументов получит функция. В итоге написание надежной конфигурялки для CMake превращается в исключительно тяжелую задачу, пусть и теоретически возможную.

byko3y ★★★★
()
Ответ на: комментарий от Harald

Биткоин вон написали, весь мир пользуется

Биткоин под винду собирается через проект VS, без автотулзов.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Да, можно поставить и на винду, и на мак базовые никсовые утилиты, и таки запустить автотулзы.

Макось - это сертифицированный Юникс, если что.

Сейчас вон гугл для новой мобильной платформы готовит ось без форка и сигналов — вот там-то все автотулзы и отправятся в утиль.

Вы про кросс-компиляцию слышали что-нибудь? Думаете, что Андроид студия запускается нативно на телефоне?

wandrien ★★
()
Ответ на: комментарий от wandrien

Макось - это сертифицированный Юникс, если что

Мак активно уходит от жопоеля. Конечно, им приятно иметь некоторую совместимость с наследием. Более того, даже винда имеет некоторую степень никсовой совместимости. И, тем не менее, довольно активно уходит от этого старья.

Сейчас вон гугл для новой мобильной платформы готовит ось без форка и сигналов — вот там-то все автотулзы и отправятся в утиль.

Вы про кросс-компиляцию слышали что-нибудь? Думаете, что Андроид студия запускается нативно на телефоне

Я писал про тенденции. Так-то эту новую ось (которая не андроид) гугл еще не выпустил. Позиция автотулз адептов в этом плане проста, и похожа на позицию создателей CMake: авось вся индустрия прогнется, чтобы поддержать наш инструмент. Уже даже на винде есть более одного способа сборки автотулзом. Что не отменяет того факта, что автотулз — говно мамонта, и родные виндовые приложения не соберет.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Какой-то поток сознания.

Так активно уходит, что прибежали с ванильной неюниксовой макоси, попутно еще потратив время на сертификацию.

Вот возьмут завтра и половину юзерленда перепишут, чтобы на LOR пользователю byko3y спокойнее жилось без форка.

Комменты на ЛОРе:

Я писал про тенденции. Так-то эту новую ось (которая не андроид) гугл еще не выпустил. Позиция автотулз адептов в этом плане проста, и похожа на позицию создателей CMake: авось вся индустрия прогнется, чтобы поддержать наш инструмент. Уже даже на винде есть более одного способа сборки автотулзом. Что не отменяет того факта, что автотулз — говно мамонта, и родные виндовые приложения не соберет.

WSL: существует.

Ага, да.

wandrien ★★
()
Ответ на: комментарий от wandrien

У ruby там собираются компилятором только расширения на си. Всё остальное, представь себе, обычный ruby.

Сборка и линковка (компоновка по-нашему) – это ранзные понятия. Съешь ещё этих сладких франузских C/С++, да выпей чаю.

kostyarin_ ★★
()
Ответ на: комментарий от EXL

С другой стороны – Python-зоопарк и ахинея 2to3 тоже не лучше, хотя вторая ветка потихоньку отмирает, слава и позор Гвидо.

В смысле? Тащитть сраное легаси годами – это и есть позор всего IT-мира включая железо. Ну буть ты мужиком, дропни поддрежку старого барахла – нет, плюшкинство во всём. Виде-те ли палеозойский хелловорд перестанет работать. Да кому не похер?

kostyarin_ ★★
()
Ответ на: комментарий от byko3y

И конкретно SDL в этом плане отличается стабильным выносом мозгов, по поводу и без повода.

Особенно мне нравится как там сделали вот это:

https://github.com/libsdl-org/SDL/blob/33598563b35067417c2fed8fab03c503438ce6f6/CMakeLists.txt#L973-L980

CMake срёт в опции компилятора флагами -mthumb -marm, а компилятор крутит пальцем у виска и выкидывает взаимоисключающие параметры. На честном слове оно как-то работает и собирается.

При этом у Android NDK был весьма крутой фреймворк с использованием Makefile’ов на стероидах. Эти пресловутые файлики Android.mk, там всё было продумано и деларативно размечалось:

https://github.com/EXL/Gish/blob/master/gish/src/main/cpp/SDL2/Android.mk#L24

Если у файла есть суффикс .arm, он будет скомпилирован в ARM-режиме, а если нет – в Thumb.

EXL ★★★★★
()
Ответ на: комментарий от kostyarin_

Ага, фантастический уровень сборки: выкачать архивы и распаковать.

Это не сборка, а управление пакетами.

wandrien ★★
()
Ответ на: комментарий от kostyarin_

А что, самый популярный и известный среди разработчиков софт на Python – Mercurial уже переписали на Python 3?

Как его дропнуть, если Nginx и Mozilla Firefox всё ещё им версионируются?

EXL ★★★★★
()
Ответ на: комментарий от wandrien

Ага, фантастический уровень сборки: выкачать архивы и распаковать.

Архив это архив, а пекет – это пакет. Нюхни C/C++ другой ноздрёй.

Это не сборка, а управление пакетами.

Управление пакетами, это когды ты в ближайшем ларьке пиво берёшь, происходит, возле кассы. А тут речь о сборке этого пакета. Даже еси основную часть нужно делать руками, это сборкой и остаётся.

kostyarin_ ★★
()
Ответ на: комментарий от EXL

А что, самый популярный и известный среди разработчиков софт на Python – Mercurial уже переписали на Python 3?

Так Ртуть же загнулась (туда и дорога). От неё даже в bitbucket отказались. Единственное полезное, что она делала – это тащила Иксы в зависимостях по умолчанию на Убунту-сервере, поджигая пуканы. Зато сколько мамкиных сисадминов узнало о –no-install-recommends

P.S.: по мне так, если код не выживает в изменяющихя условиях – то пусть мрёт. Эволюионный проесс. Фишка как раз в том, что и форсирование обновления и отмираение должно иметь свои границы. А пока границы не обговорены – то и раговор иначе чем пустым не получиться, уж извиняйте.

kostyarin_ ★★
()
Последнее исправление: kostyarin_ (всего исправлений: 1)
Ответ на: комментарий от EXL

nginx, firefox - это фигня. вот facebook - это сила!

anonymous
()
Ответ на: комментарий от a1batross

Можно вызвать cmake с опциями -LAH для вывода опций.

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

Ну я же показал, как переписать значение переменной.

Только неправильно показал. Правильно наверное будет (под рукой cmake нет проверить) – cmake . -DSDL=no -DHEADLES=yes.

А если флагов уйма? Держать в голове что там отключалось, а что нет? Или на листочке записывать?

Это нелогичное поведение.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Только неправильно показал

В той команде я привел только то, как изменить требуемую переменную.

А если флагов уйма?

Ну я обычно при конфигурировании всегда указываю требуемые флаги явно. А при переконфигурировании только те, которые нужно изменить. По моему - это логичное поведение cmake.

rumgot ★★★★★
()
Ответ на: комментарий от a1batross

Я пока что не видел проектов в которых конфигурация занимает слишком много времени

Ну так или иначе, вот добавил в список исходников еще один файл - не запускать же снова конфигурирование целиком.

rumgot ★★★★★
()
Ответ на: комментарий от wandrien

Чтобы сконфигурировать на месоне что-то сложнее хелло ворлда, нужно писать к нему скрипты на баше.

Если для конфигурации вам нужен Тьюринг-полный язык и скрипты на Bash, то вы делаете что-то не так. Не надо оправдывать криворукость сложностью. Огромные проекты собирают примитивной системой сборки. Даже проектов IDE часто достаточно.

X512 ★★★★★
()
Ответ на: комментарий от EXL

Проблема с CMake в том, что они обосрались в своих обещаниях и пошли обратно, перестали поставлять Find-модули, хотя изначально поставляли.

Эти костыли надо вообще все выкинуть и заменить на давно везде работающий (включая BSD и Haiku) pkg-config. Не понимаю зачем их держат, неужели ещё есть библиотеки, которые нельзя добавить в pkg-config?

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)

имхо, 2 составляющие успеха cmake:

  • кроссплатформа
  • поддержка IDE (сначала генерила проекты, сейчас через fileapi)

кто из писателей билд-систем не понимает важности этих ключевых фичь - CCЗБ.

в том числе и писатели вот этого build2. Доки у них - сплошная наркомания. ничего про IDE нет.

anonymous
()

Всё что не поддерживает сборку проектов содержащих фрагменты на нескольких языках - не нужно.

grem ★★★★★
()
Ответ на: комментарий от a1batross

Зачем CMake вообще нужен кэш?

Кэш в CMake это единственный способ сделать документированную пользовательскую точку настройки. Другими словами, если в скрипте переменная set(MyVar), то на её значение извне повлиять нельзя. Если в скрипте переменная set(MyVar CACHE), или option(MyVar), что то же самое, то пользователь может задать её извне через cmake -D или графический фронтенд.

d_a ★★★★★
()
Ответ на: комментарий от wandrien

вопрос DLL hell, который в дистрибутивах линукса за 25 лет решить не смогли.

смогли

zerhud
()
Ответ на: комментарий от X512

Не знаю. Я об этом build2 узнал из новостей на isocpp.org, конкретно, о том, что build2 стала поддерживать модули C++20.

seiken ★★★★★
() автор топика
Ответ на: комментарий от byko3y

Я собирал под винду автотулзами, вполне себе работало. Точнее не сам биткоин, а его форк, в котором сборку не трогали

Harald ★★★★★
()
Ответ на: комментарий от wandrien

DLL hell

Эта проблема преувеличена. Всегда можно положить в состав пакета библиотеку требуемой версии и настроить через RPATH линковку с ней, а не с той, что лежит в системе.

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

Так я уже треттий раз в этой теме пишц, что CMake умеет работать с pkg-config.

Я знаю. Мне непонятно почему до сих пор существуют костыли с ручным распознаванием библиотек и они активно эксплуатируется?

X512 ★★★★★
()
Ответ на: комментарий от rumgot

Всегда можно положить в состав пакета библиотеку требуемой версии и настроить через RPATH линковку с ней

И для этого потребуются костыли с bash-скриптами. В Haiku *.so файлы можно положить в ./lib.

X512 ★★★★★
()
Ответ на: комментарий от rumgot

А что такого?

Попробовал cmake -LAH. Его только грепать в поисках необходимого, потому что наполовину он забит переменными самого CMake. И по группам деления нет. Удобно!

a1batross ★★★★★
()
Ответ на: комментарий от X512

И для этого потребуются костыли с bash-скриптами.

Не правда. Я все это делал исключительно через cmake.

rumgot ★★★★★
()
Ответ на: комментарий от wandrien

Не нужно смайликов. Аргументы пожалуйста.

rumgot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.