LINUX.ORG.RU

Чем нынче принято собирать проекты на плюсах в приличном обществе?

 , , ,


0

3

После долгого перерыва начинаю новый проект на плюсах. Кроссплатформенный, с гуем на dear imgui и парой либ в зависимостях. Хочется кроссплатформенной сборки без бубнов и обмазывания скриптами + управление зависимостями. Попробовал vcpkg + cmake и чёт оно какое-то костыльное, аж блевать тянет. Неужто за все эти годы ничего нормального для плюсов не сделали?

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

Ну после секса с симейком и vcpkg, я склоняюсь к тому, что самописный makefile и зависимости добавленные как git submodule, это не такая уж и всратая идея.

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

Пару лет назад я mingw юзал, было нормально. Но тут нужно понять, речь идет о кроссплатформенности (собирается на несколькких платформах) или кросскомпиляции (собирается из под linux под разные платформы)?

В первом случае cmake может сэкономить кучу сил. Во втором не знаю… я юзал gnumake

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

У меня ровно обратный опыт, есть дофига, что относительно не сложно делается с помощью cmake (если хорошо разобраться конечно) и на других либо очень не просто повторить, либо вообще не реально. Из всех остальных, что я пробовал, относительно не плохо с этим справляется meson, но некоторых мелких фич всё равно не хватает.

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

Не знаю, я просто наверное ленился разобраться с cmake (там еще эти пляски с версиями) но в свое время сильно упарывался по gnu make. Коллеги знающие cmake говорили что то что я делал на gnu make он делает проще, но как то неуверенно… ;-)

AntonI ★★★★
()

я бы рискнул попробовать https://build2.org/

боевого опыта применения у меня нет, но чтение документации по диагонали внушает.

на крайняк съехал бы потом на дефолтный cmake, если бы уж прям совсем припекло.

а как еще расширять горизонты?

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

Ну я хотел всё статично собирать и не зависеть от хоста, ибо хочу распростронять прогу наиболее простым и универсальным способом, не заморачиваясь с придурью типа appimage и прочего.

dictator2000
() автор топика

Если ты не гугл, то CMake пока что всё равно на голову выше всех остальных костылей, если уметь его правильно готовить.

intelfx ★★★★★
()

Лично я пользуюсь conan/cmake. В принципе особой костыльности не вижу, хотя и есть особенности из-за того, что это не единая система, а две отдельных.

Conan через CMakeDeps генерирует вполне обычные cmake-файлы, подключающиеся обычным find_package(), он в этом плане практически полностью прозрачен.

Тут есть нюанс: conan недавно выпустил версию 2.0, где сломали обратную совместимость и некоторые вещи до сих пор не адаптированы, но по большей части всё перенесено.

Как оно там в приличном обществе не знаю, но я для себя пока ничего лучше не нашёл. М.б. conan/meson можно рассмотреть.

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

Пойми, придурь - это распространять блобы. Ты тратишь кучу времени на то что всё равно не будет работать, при том что есть мантейнеры которые готовы это сделать за тебя, хорошо, быстро и бесплатно. Непридурьных решений для этой придури априори не существует. И, кстати, блобопакеты типа crappimage наверное самое нормальное решение. Тащить в сборку всякое говно которое во время сборки будет качать зависимости и которое нужно будет ещё помучиться чтобы оторвать, точно хуже.

slovazap ★★★★★
()

Попробовал vcpkg + cmake и чёт оно какое-то костыльное, аж блевать тянет.

Программисты на C++ не осилили написать себе собственную сборочную систему, у них получился CMake.

Можешь поступить как GNOME и Red Hat, считай большая часть Linux-стека, то есть уйти с этого CMake (читай PHP в мире сборочных систем) на какой-нибудь Meson.

Если проект крошечный, а ImGUI как бы намекает на это, то проще будет написать Makefile чтобы не попасть в ситуацию, подобной этой:

Cmake, mingw32 и сборка под Ubuntu для получения exe-файла

TL;DR – ТС там ковырялся с CMake двое суток для проекта из одного файла. Как бы прекрасно показывает суть системы сборки.

EXL ★★★★★
()

Смотрел этот твой Dear ImGui и наткнулся на прекрасное, на базе этой UI библиотеки: https://github.com/wolfpld/tracy

Не знал что такое существует.

А по теме: такие проекты как ты собираешься сделать строятся вокруг или ключевой библиотеки (в твоем случае ImGui) или вокруг какого-то примера или прототипа, уж на ранней стадии точно. Tracy что я привел выше - на meson + vcpkg, можно взять в качестве примера.

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

alex0x08 ★★★
()
Ответ на: комментарий от ya-betmen

Твой недавний тред – это как раз отличная демонстрация всратости CMake.

Если программист два дня ковырялся с CMake, но не смог с ним разобраться, зато моментально с лёту разобрался в какой-то богом забытой маргинальной системе сборке под которую инфы в интернете кот наплакал, это многое говорит о юзабельности и документированности CMake’а в целом.

Система сборки должна помогать и упрощать задачу сборки программного обеспечения, а не усложнять её.

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

в какой-то богом забытой маргинальной системе сборке под которую инфы в интернете кот наплакал

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

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

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

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

А чем meson как таковой лучше cmake’а (кроме немного менее всратого синтаксиса)?

Грубо говоря я вот разобрался с cmake’ом, более-менее осилил modern cmake и таргеты, и каких-то сложных проблем с cmake’ом у меня больше не возникало. При этом синтаксис его ужасен и не приятен, да.

Я краем глаза взглянул на meson, да он выглядит по-приятнее. Но помимо этого у него есть какие-то фичи? Просто разбираться в meson’е только ради синтаксиса как-то не особо привлекает. Тем более, что плюсовых проектов на мезоне по-прежнему меньшинство.

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

Да, я-то думал, что за эти годы в плюсы завезли что-то годное, но походу проще всего старый добрый рукописный Makefile использовать, а то я на ковыряние cmake потрачу больше времени, чем на разработку.

dictator2000
() автор топика
Ответ на: комментарий от alex0x08

вокруг какого-то примера или прототипа,

Примеров полно, да, но зачем обезьянничать и копировать других? Не факт, что они хорошо сделали. Тот же трейси тупо копирует исходники imgui прямо в дерево проекта (даже не как сабмодуль). Я, конечно, понимаю, что так проще, но это же не дело в 2023 году.

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

Потому что уже всё остальное выбрано и продуман концепт. Теперь нужно разобраться как это всё собирать под разные системы.

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

Примеров полно, да, но зачем обезьянничать и копировать других?

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

Не факт, что они хорошо сделали.

Тем не менее у авторов получилось развить пет-проект до такого масштаба и уровня.

Тот же трейси тупо копирует исходники imgui прямо в дерево проекта (даже не как сабмодуль).

Если немного подумать то окажется что тебе тоже стоит так поступить. Потому что imgui предоставляет только очень небольшое количество функций и для реальной работы тебе придется его расширять и затем поддерживать свои патчи.

alex0x08 ★★★
()

На мой взгляд cmake стал стандартом де факто. Для простых проектов я бы обычный make использовал. Еще можно на bazel глянуть, если времени свободного много.

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

Только Java, только Maven, только счастье впереди.

давайте сравним минимальные конфиги для сборки helloworld на CMake и maven. Итак, на CMake:

add_executable(helloworld helloworld.cpp)

Всё. А теперь покажите на maven…

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

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

С чего это оно стандартное? В одном проекте одно, в другом другое. В том же трейси какой-то компот из cmake, meson и vcpkg.

Тем не менее у авторов получилось развить пет-проект до такого масштаба и уровня.

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

Если немного подумать то окажется что тебе тоже стоит так поступить

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

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

Ява, очевидно, более продумана в плане экосистемы. Но в рамках данного топика, это оффтоп. Если бы я мог на яве этот проект пилить, то я бы так и сделал и не лез бы в эти дебри нетрадиционного секса со сборкой.

dictator2000
() автор топика