LINUX.ORG.RU

система для сборки с зависимостями для C++

 , ,


4

12

Нужна система для сборки с зависимостями для C++

В других технологиях есть альтернативы:
Maven - Java
Pip & Eggs - Python
Gems - Ruby
CPAN - Perl
cabal - Haskell
CTAN - TeX

Попробовал найти что-то подобное для Крестов, но с первого захода не осилил :(

Хотелось бы что-то Maven-like: XML с декларативным описанием зависимостей (исходников и бинарников) и описанием настроек сборки.

Важно:
- кроссплатформенность (Lin, Win, OSX) и возможность запускать из голой консоли
- зависимости должны лежать в интернете
- в том числе пред-собранные, без исходников, отдельно для каждой платформы/компилятора/...
- сборка через что-нибудь адекватное типа cmake
- удобная настройка выхлопа под разные дистрибутивы (на лине - использование системных либ, на шиндовсе и маке - «всё своё тащу с собой»)
- очень желательна искоробочная работа с гитхабом и другими подобными источниками (чтобы не поднимать свой сервер для работы с непубличными артефактами)

В качестве точки отсчёта, предлагаю считать за компиляторы только GCC-Linux, Clang-OSX и MSVS-Windows в «текущей» версии стандарта C++ (общяя часть для всех этих компиляторов) c cmake в качестве бэкенда сборки - всё остальное ненужно.

Спасибо за годные советы! С меня как всегда - ничего :3

★★★★☆

Последнее исправление: stevejobs (всего исправлений: 3)

Ответ на: комментарий от eao197

я не пишу на руби и понятия не имею, как он устроен. С++ гораздо мощнее и там нет кубиков, из которых надо строить башенки. там есть открытый выбор из сотен опенсорцных библиотек и каждый разработчик берёт то, что ему больше подходит.
похоже, что вы путаете языки программирования и пакетные сборки. как программист С++, я не представляю себе, что значит «установить пакет» в смысле кода. скачал и распаковал код куда тебе нужно - вот и вся «установка». системы установки сорцов в дистрибутивах иногда ещё хэдеры в include устанавливают, чтобы лишних путей не прописывать, и на этом, собсна, всё. но это для конкретного дистрибутива годится. а на девелоперской машине обычно одновременно находятся несколько разных версий одних и тех же библиотек. и в одном проекте используются одни версии, в другом - другие и т.д. создать монстрозный софт, который будет рулить всем этим бардаком, по-моему просто нереально. он будет неудобен в использовании, потому что будет слишком перегружен огромным количеством настроек. есть системы пакетирования и системы сборки типа OpenWRT, которые заточены под вытягивание с репозиториев и сборку конкретных образов. но это не программистское поделье, это админская шняга. для программирования такие системы хотя и можно приспособить, но будет неудобно, громоздко и сложно настраивать.

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

А десятку Вы, как всегда проигнорировали? Потому что в глаза не видели, а если припирает, отписываете что-то о заднеприводных?

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

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

да CMake отъедает гораздо меньше времени, чем компиляция. раз этак в сто. для больших проектов подождать секунд 30 работы CMake'а, чтобы потом зашарашить сборку на пару часов - это не проблема.

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

А десятку Вы, как всегда проигнорировали?

После хрюнделя мастдайка вообще в СГ скатилась. Так что, зачем смотреть, если априори понятно, что шлак?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от tailgunner

endif(condition) в роли endif, set(имя переменной значение) - это не песец как он есть? Такое впечатление, что разрабы специально делали говно.

Полностью согласен насчет ублюдочного синтаксиса (правда в endif condition можно уже не писать). Думаю изначально разработчики просто неосилили написать нормальный парсер и лепили такие конструкции, которые бы легко парсились их поделием.

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

я не пишу на руби и понятия не имею, как он устроен

похоже, что вы путаете языки программирования и пакетные сборки

facepalm.jpg

Выгляни за пределы экосистемы Си++ - может, узнаешь что-нибудь новое и научишься чему-нибудь полезному.

там есть открытый выбор из сотен опенсорцных библиотек и каждый разработчик берёт то, что ему больше подходит.

Как минимум в Python и Rust то же самое.

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

в endif condition можно уже не писать

Но скобки-то остались. Теперь endif писать короче, но выглядит оно как вызов функции :/

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

Что ты имеешь в виду под «десяткой»? Я думал, что десятую мастдайку. Если же ты имеешь в виду гей-ось, то вообще в топку!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от tailgunner

я и так знаю много полезного. подозреваю, что побольше некоторых.
на C/С++ написано в тысячи раз больше кода, чем на многих прочих языках. и нет никакого упорядочивания библиотек, потому что оно просто не нужно. опенсорц не имеет ограничений и каждый пишет что хочет и как хочет, под свои нужды. и упорядочить такое количество библиотек нереально. поэтому никакой «менеджер» тут в принципе неприменим. нельзя навязать всем какой-то единый стиль, в этом нет ни необходимости, ни смысла.

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

я и так знаю много полезного. подозреваю, что побольше некоторых.

Возможно. Например, лично я не умею играть на бас-гитаре.

на C/С++ написано в тысячи раз больше кода, чем на многих прочих языках

Я уточню - в 100500 тысяч раз.

и нет никакого упорядочивания библиотек, потому что оно просто не нужно

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

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

GNU Make. Но да, у меня специфические условия работы.

локалхост?

Почти. Много локалхостов.

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

Тут не будет компромисса.
Но мне не раз приходилось писать makefile руками, когда проект не собирался cmake'ом. Да, неосилил. Но может причина не во мне?

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

Твой проект или какой-то уже существующий?

// строго обратная ситуация: не раз приходилось писать CMakeLists.txt руками, когда существующая система сборки лажала, или работала на полутора машинах (включая разработческую), или не позволяла задать флаги, или не умела в кросс-компиляцию...

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

endif(condition) в роли endif

endif().

set(имя переменной значение) - это не песец как он есть?

Не песец, а всего лишь однообразный синтаксис, который просто парсить.

Нет ничего, что нельзя было бы заменить на GNU make и немного шелл-скриптов %)

Нет ничего, что нельзя было бы написать на машинных языках, но жизнь слишком коротка.

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

set(имя переменной значение) - это не песец как он есть?

Не песец, а всего лишь однообразный синтаксис, который просто парсить.

Без () его было бы парсить еще проще. Кроме того, не понимаю, почему меня должна волновать простота парсинга этого говноязычка.

Нет ничего, что нельзя было бы заменить на GNU make и немного шелл-скриптов %)

Нет ничего, что нельзя было бы написать на машинных языках, но жизнь слишком коротка.

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

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

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

Ну ты же сам начал эстетствовать и задаваться вопросами на тему «а почему они сделали именно так».

Почему я говорю «эстетствовать» — потому что если посмотреть объективно, то приписывать к каждому выражению две скобки не является сложной и непосильной задачей.

Кроме того

Кроме того, язык Makefile, по моему мнению, куда более ублюдочен.

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

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

Ну ты же сам начал эстетствовать

язык Makefile, по моему мнению, куда более ублюдочен.

Вырастешь - поймешь, что не так с этими мнениями, а мне лень объяснять.

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

я не пишу на руби и понятия не имею, как он устроен.

Кроме RubyGems есть еще упомянутый здесь Maven. Есть NuGet для .NET-а и еще куча всего, что предназначено для решения проблем именно разработчиков.

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

endif(condition) в роли endif

Это не обязательно.

set(имя переменной значение)

И что тут такого ужасного? Ну кроме «динамичности» (на что, наверняка, найдутся любители) и возможности обращаться к несуществующим переменным.

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

поймешь, что не так с этими мнениями, а мне лень объяснять.

Писать на лоре тебе не лень значит. Ну и, к счастью, intelfx в своём мнении не одинок и у нас есть хотя бы cmake.

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

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

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

блин, столько пафоса!

Высокомерия и снобизма, как сказал персонаж ранее по треду.

мой мирок - это мирок промышленной автоматизации, встроенных девайсов и сетевых протоколов

Мой тоже.

меня куча архитектур и разных ядер, я собираю софт под разное железо

Аналогичная фигня.

куда уж мне до продвинутости IDE-шечек, которые сами генерят код для ленивых программистов [...] даже тулчейны почти все самосборные и разные. и мне не нужен никакой менеджер, чтобы всё это нормально собиралось - вот ведь парадокс!

«Сколько пафоса!» (ц) Что, совсем никакой, даже make нету? Ах, есть? Так вот, всякие pip, gem, cargo и прочее - это следующая стадия развития make. За 40 лет кое-что изменилось.

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

просто у некоторых очень много свободного времени вот и предпочитают половые контакты с ПО обычным.

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

это для любого варианта Make базовая фича синтаксиса

Эта фича приносит серьезные неудобства и ее давно пора ликвидировать, заменив на что-то более удобное. Классика и олдскульность == неудобное говно мамонта, когда они входят в противоречие с удобством и надежностью.

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

biicode - это проприетарщина, причем платная? Ненужно же

У них есть план по переходу к полному открытию и первый этап они уже прошли.

По мне так biicode неудобен.

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

По мне так biicode неудобен.

а чем конкретнее? а то увидел впервые - штука на мой взгляд архиполезная, какие аргументы против нее?

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

Может и годен, но абсолютно неадектватен

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

Запомнить один раз, что в Makefile действие выделяется отступом с табом - это так неимоверно сложно, что проще наплодить 100500 новых велосипедов?

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

endif(condition) в роли endif

C мохнатой версии endif():

Note that the expression in the else and endif clause is optional.

http://www.cmake.org/cmake/help/v3.0/command/if.html

set(имя переменной значение) - это не песец как он есть?

What seems to be the officer, problem? В общем случае — говёная альтернатива VARIABLE=VALUE синтаксису, но у set есть куча опций.

Такое впечатление, что разрабы специально делали говно.

Да, сложно понять то хрупкое исскусство, которое хотели нам донести создатели CMake. Можно лишь сделать скидку, что этот язык — DSL. Но почему бы просто не наделать библиотек (которые, к слову, уже есть) для Python/Perl/YFSL, которые бы просто делали то же самое, что и CMake, но использовали полюбившийся и знакомый многим синтаксис.

UPD упс, забыл про scons

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

И его преемник GN

Не годен:

The main features not supported in GN yet are: * Mac bundles * Loadable module (this only matters on Mac where shared library != lodable module) * Precompiled headers

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

Всё это слишком сложно для рядового программиста или админа.
Я конечно понимаю, что Крестопоклонники привыкли пердолиться с такими проблемами

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

Если подключение зависимостей (и поддержка их в обновлённом состоянии) составляет проблему, то это проблема.

Ну а git pull origin ну очень сложно набрать, в тысячи раз труднее чем make install.

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

да CMake отъедает гораздо меньше времени, чем компиляция. раз этак в сто. для больших проектов подождать секунд 30 работы CMake'а, чтобы потом зашарашить сборку на пару часов - это не проблема.

Есть ещё такой параметр, как время инкрементальной пересборки после изменения одного файла. Или даже без изменений.

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

я не пишу на руби и понятия не имею, как он устроен. С++ гораздо мощнее

А как можно сравнивать А и Б, не зная ничего про А?

C++ промышленная автоматизация крутые проекты охрененный опыт вот это все

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

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

Здесь все претензии к Make. CMake генерирует мейкфайлы.

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