Представлен релиз кроссплатформенного открытого генератора сценариев сборки CMake 4.1.0, выступающего в качестве альтернативы Autotools и используемого в таких проектах, как KDE, LLVM/Clang, MySQL, MariaDB, ReactOS и Blender. Код CMake написан на языке C++ и распространяется под лицензией BSD...Подробнее: https://www.opennet.me/opennews/art.shtml?num=63713
В каком интересно месте он "простой языка сценариев"? По-моему он давно примкнул к тем кого должен был заменить
Тоже обратил внимание, что все альтернативы старому-доброму make почему-то сложнее и только продолжают бухнуть. Может конечно возможность выкачивать зависимости с гитхаба напрямую и есть хорошо, но вот эта вечная беготня с «да что перестроить уже, чтобы ты готовую либу всё же увидел» и жонглированием трудночитаемыми конфигами напрягает.
А сколько дыр через все эти навороченные системы сборки пролезает...
Крепитесь: всё чаще попадаются C/C++ проекты со сборочными скриптами на питоне.
Так питон идеальный язык для быстрого написания скриптов. Разве не так? И да, meson открой для себя.
На мезоне сидят гтк, вяленд, системд и оригинальный ксорг, что как бы намекает.
Версии сборочных системы не всегда совместимы как тотже Conan (1.x vs 2.x) в отличие от CMake
А почему не на расте?
> А почему не на расте?Угадай с трех раз, на чем пишутся сборочные скрипты для проектов на расте ...
что там гадать.
toml & rust (build.rs)
и Lua (xmake с xrepo в китайских проектах)
Питон это Meson или Conan
>все альтернативы старому-доброму makeЯ тебе маленький секрет открою. На выходе cmake генерится старый добрый Makefile.
Да он CMake и не пользуется.И наверняка вообще имеет условное отношение к разработке на C или C++, ибо собирать сколь-нибудь большой проект на этих языках при помощи голого make - это чистый мазохизм. Коллеги тебе этого тупо не дадут сделать.
Эти коллеги в вкусно-и-точка скоро работать уйдут, т.к. иишка всех лоускилов выкидывает уже с рынка. Я вот стартап пилю и там только Make, т.к. это мегаудобно все вспомогательные действия держать в 1 месте а не плодить кучу мелких скриптов. И действия - любые, а не только предусмотренные авторами смаке. И качать зависимости можно хоть с гитхуба хоть откуда прозрачным способом и билдить их какой угодно сторонней системой сборки, просто сделав соответсвующий таргет. При этом собственно сборка всех с/с++ файлов проекта - 7 строк.
> Эти коллеги в вкусно-и-точка скоро работать уйдут
> Я вот стартап пилюНу, то есть, на мороз пока выкинули только тебя. 😂 Стартап, лол...
> все вспомогательные действия держать в 1 месте а не плодить кучу мелких скриптов
И весь исходный код тоже в одном файле, надеюсь? 😂 Хотя, когда у тебя хэллоуворлд - это не проблема, так ведь?
> И действия - любые, а не только предусмотренные авторами смаке
А, ну понятно: еще один эксперт, который CMake в глаза не видел, рассказывает об его ограничениях. 🤦
> И качать зависимости можно хоть с гитхуба хоть откуда прозрачным способом и билдить их какой угодно сторонней системой сборки, просто сделав соответсвующий таргет. При этом собственно сборка всех с/с++ файлов проекта - 7 строк.
Ты не поверишь, но в CMake тоже так 🤯. Только вот работать оно будет на всех системах (даже Винде), а не только в юниксовом окружении.
Ну каг бе стратап зарабатывает уже неплохо, есть некоторый штат сотрудников, а я за CTO. Я заранее подготовился, а кого-то вот ждёт неприятный сюрприз. Кусочки кода, которые узко смотрящие кодеры могут писать, давно уже нейронка делает.> эксперт, который CMake в глаза не видел
15 лет в IT за деньги, а так ещё больше.
> даже Винде
А мне не надо чтобы на венде работало (но там вообще-то есть линукс окружение и собрать можно если не лоускил или хотя бы дипсик осилил).
> есть некоторый штат сотрудников, а я за CTOТы уж определись, СТО ты или кодер-писатель make. 😂
> 15 лет в IT за деньги, а так ещё больше
Жаль, что не на позиции разработчика. 😂 А то в любом серьезном проекте ты за ручное написание make получил бы по шапке уже в первый месяц. 🤣
> А мне не надо чтобы на венде работало
Да я и не сомневался. Только вот тем, кому это надо - используют CMake.
> но там вообще-то есть линукс окружение и собрать можно если не лоускил или хотя бы дипсик осилил
Тебе об этом тот самый Дипсик сказал? Спроси его заодно, зачем мне там на Винде "линукс окружение", если проект собирается с msvc.
> Ты уж определись, СТО ты или кодер-писатель make.Тут некоторые жалуются мол синтаксис непонятный. Чатик всё напишет если что-то нетривиальное нужно. Лычку мастера мейкфайлов иметь не обязательно, достаточно иметь положительный iq. А так я много чё делаю, RnD всякое, деплой, настройка системы, оптимизация нейросетевых моделек - не только код пишу. Поэтому make как инструмент автоматизации не только лишь сборки - мастхэв.
> если проект собирается с msvc
Кто в здравом уме в 2к25 будет планировать стартап под венду? Либо под мак писать надо, т.к. деньги там, либо веб, котороый на линукс / wasm кругом, либо хардварный стартап с прошивками - там опять же msvc ненужон. Везде Make как родной. Если игру делать - то они все на готовых движках со своими билд системами.
CMake использует Ninja (когда доступно)
я тебе маленький секрет открою.
СMake никогда не был альтернативой make.
СMake стартанул как альтернатива autotools.
Согласенcmake ./
make
Давно уже генерится ninja. Потому что make не умеет не только в конфигурацию проекта, но и в собственно сборку.
> Тоже обратил внимание, что все альтернативы старому-доброму makeА make когда-то был системой сборки? 😂
А не что тот факт, что cmake - это генератор Makefile'ов, т.е. аналог autotools. Makefile, cгенерированный cmake'ом, затем внезапно запускается в обычном make.
CMake поддерживает несколько генераторов. Ninja намного производительнее чем Make
> Ninja намного производительнее чем MakeЭто миф. Ninja просто запускает подготовленные кем-то (basel например) команды из compile_commands.json.
1. если в makefile просто засунуть список этих команд, без вычисления зависимостей, то отработает за +- то же время, но так люди не делают, т.к. не читаемо.
2. ninja отрабатывает после генератора этого compile_commands.json и если сложить время, то оно будет больше чем у нормального человеческого Makefile из нескольких строчек.
> ... команды из compile_commands.json🤣🤣🤣
>> Ninja намного производительнее чем Make
> Это миф. Ninja просто запускает подготовленные кем-то (basel например) команды из compile_commands.json.Вот такие вот истории со срывами покровов получаются, когда стартапного СТО познакомить с DeepSeek... 🤦
Чатик мне запилил так-то рабочий скрипт для конвертации мезон либ в тупо папку в проекте с исходниками парсингом compile_commands.json, так что я в курсе, как это работает. Makefile в отличие от cmake не требует указывать каждый C/C++ файл (тот так может но криво и ломается так сборка постоянно, поэтому у смачников сизифов труд по добавлению каждого с файла в смаке). Т.к. мне не нужно иметь кучу раздутых so всё собирается статически с едиными флагами в компактный бинарь.
И да, я использую генерацию кода - и что вы мне сделаете) Раздутый штат кодеров больше компаниям не нужон.
> рабочий скрипт для конвертации мезон либ в тупо папку в проекте с исходниками парсингом compile_commands.jsonПопроси чатик объяснит смысл этого набора случайных слов, ибо я лично распарсить его не смог.
> Makefile в отличие от cmake не требует указывать каждый C/C++ фай
CMake тоже не требует. Спроси у своего чатика о CONFIGURE_DEPENDS.
> Т.к. мне не нужно иметь кучу раздутых so всё собирается статически с едиными флагами
Ага, все сторонние либы, да еще и C с C++ вперемешку - с едиными флагами? 😂 Ну сказано же: мастер хэллоуворлдов, реальных кодовых баз в глаза не видавший.
> И да, я использую генерацию кода - и что вы мне сделаете)
Проявим сочувствие. Ну, насколько это возможно к "стартапному СЕО, по совместительству писателю мейкфайлов при помощи DeepSeek" 🤣
> я лично распарсить его не смогНе мудрено для i shaped специалиста по смаке. Поясняю - берётся мезон либа, указываются нужные флаги, мезон генерит compile_commands, скипт на питоне достаёт оттуда пути к собираемым файлам, фиксит корявые пути к инклудам и кладёт с/с++/h файлы в отдельную папочку внутри Makefile проекта. Всё, больше мезон не нужен.
> C с C++ вперемешку - с едиными флагами?
Да, прикинь? Проект на C/C++ с едиными флагами (кроме версии стандарта языка разве что, это включено в CC/CXX переменную)
app: $(patsubst %.cpp,build/%.cpp.o,$(SRC_CPP)) $(patsubst %.c,build/%.c.o,$(SRC_C))
$(CXX) $^ $(LFLAGS) -o appbuild/%.c.o: %.c
$(CC) $(CFLAGS) -I$(dir $<) -MD -c $< -o $@build/%.cpp.o: %.cpp
$(CXX) $(CFLAGS) -I$(dir $<) -MD -c $< -o $@-include $(patsubst %.cpp,build/%.d,$(SRC_CPP)) $(patsubst %.c,build/%.d,$(SRC_C))
И всё! Надо будет - добавлю go / swift / что угодно компилируемое.
> Проявим сочувствие
Учитесь, пока не поздно) Либо правильному промптингу нейронок, либо котлету на булку класть)
А где ты там сложности вообще увидел? target_link_libraries не осилил?
В прошлый раз тут советовали писать тесты для оператора if, потому что по меркам CMake это сложная логика с проблемным легаси ("The if command was written very early in CMake's history..."), которое решили не чинить.
Не знаю, кто там тебе и чего советовал, но проект на cmake накинуть можно за пару минут.
Интересно, как скоро
а) язык конфигурирования сборочной системы СМаке оформится как отдельный, полноценнный Тьюринг-полный язык,
б) для которого нужен будет свой язык конфигурирования сборки?
так CMake уже Тьюринг-полный и скрипты можно запускать не в режиме сборки, а в режиме интерпретации через ключ -P
На работе, в основных проектах, был выбран CMake. Периодически приходиться нырять в эту чертовщину и чинить. Хорошо хоть появились форки CMake с поддержкой отладки.
Для домашних проектов использую premake5. С версии 5-beta6 появился API для управления зависимостями примерно как в CMake. Теперь можно описать как использовать либу, а потом просто воткнуть в проекте uses 'SDL3' и нужные опции прокидываются. Тут если что почитать можно: https://premake.github.io/docs/Usages-and-UsesКороче CMake не нужен, закапывайте.
> С версии 5-beta6 появился API для управления зависимостями примерно как в CMake.
> нужные опции прокидываются
> Короче CMake не нужен, закапывайтеТо есть недавно в бета-версии premake появилась опция, которая доступна в CMake уже лет 20? Уже бегу закапывать CMake!
>в основных проектах
>нырять в эту чертовщину и чинитьНаверное тут надо команду разработи менять, а не cmake.
Все используют CMake, но писать на этом языке никто не хочет
Я тебя может удивлю, но пользователи cmake даже не используют. Только мейнтейнеры и изредка программисты.
Беда почти всех яп - чтобы собрать программу, надо выучить ещё один язык. Хорошо, что я сборщики себе на сях свои пишу.
что мешает писать все в одном файле? :)
Нужно умещать весь код в один экран, как это делает создатель языка K.
забыл совсем, у вас там скрол не работает в терминале :)
Rust с build.rs нервно курит в сторонке... Хотя, о чем это я. Для экспертов опеннета раст - не язык.
build.rs нужен в одном крейте из ста. Для обычной сборки обычного проекта на rust (с зависимостями, естественно) вообще ни строчки сборочной системы написать не надо.
а в чем проблема писать так чтобы одного языка хватало?
Кто-нибудь пробовал системы сборки meson или bazel?
Зависимости cmake весят больше программы в несколько раз. Прикольно, че.
смешнее то что куча из них (к счастью, не все - обязательные) давно сами без cmake не собираются.(поэтому у вас и не будет больше ни одной нормальной ос после линукса и венды)