LINUX.ORG.RU

c++ build system

 ,


0

2

Подскажите пожалуйста, что лучше всего использовать сегодня для сборки? Я знаю про CMake, но не уверен умеет ли он следующее:

  • Самостоятельно поустанавливать флаги вроде -Wall (например pedantic, fail on errors и тому подобное) для gcc и clang
  • Самостоятельно выкачать откуда-нибудь dependencies для сборки, собрать их, положить куда-нибудь в src/build

Или для этого нужен Conan? Или Conan не умеет собирать?

В общем хочется что-то вроде cargo наверное.

Что сейчас самое удобное для новых проектов?

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

За мечты деньги не платят. Учи что есть.

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

PS: он может собирать проекты по ссылке с гитхаба с указанием коммита?

Вообще-то билд система и менеджер зависимостей это две большие разницы, только в Go додумались скрестить ежа с ужом, причем весьма по идиотски

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

Правильно ли я понимаю, что строка:

C:\path\to\conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan

добавляет репозиторий

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

а строка:

C:\path\to\connan install .. –build missing

скачивает и собирает софт указынный в конфиге его проекта следуя конфигам из репозитория добавленного в первой строке? Или только собирает, а скачивать надо руками и «таскать с собой»?

Она пытается скачать с репозитория бинарные сборки нужных тебе либ с учетом требуемых тебе параметров (операционная система (Windows/Linux/…), разрядность (x86/x64), тип сборки (Debug/Release), версия компилятора, версия abi и т.п.)

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

Затем эти собранные локально бинарники помещаются в локальный репозиторий на компе и при следующем запуске конана больше пересобираться не будут.


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

Использовать ли конан + смейк или наколхозить чисто на смейке, вопрос философский. Конан очень фичастая штука (не по своей воле, сборка плюсовых проектов очень сложная вещь, а конан пытается охватить вообще все варианты), и из-за этого он довольно сложен в изучении. Поэтому, если в проекте 2-3 внешние зависимости, то проще их поддерживать чисто смейком, без конана-монстра. Но если зависимостей реально много, если сборка проекта со всеми зависимостями занимает часы и хочется как-то ее ускорить за счет хранения уже собранных бинарников на внешнем хранилище, то конан для этого сейчас лучший вариант.

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

А кто мешает сделать вот так? (далее ручная установка флагов).

Да никто. Я просто хотел понять, что Jason Turner имел ввиду говоря When I set up my build system I had many more warnings that I wasn't thinking about (c) c++ build system (комментарий)

Use git submodules, Luke! Хотя можно сделать кастомные команды, наверное

Да какая разница submodules это или просто рядом положенные клоны репозиториев с кодом зависимостей, хотелось просто репозитория их конфигураций а-ля AUR. Чтобы, например, я создаю libxxx, добавляю в репозиторий какого-нибудь dependency_manager_and_build_system_X PKGBUILD или нечто похожее, где указываю, откуда качать мою libxxx, как ее собирать и так далее. Следом вы, желая использовать мою libxxx просто указываете в dependency_manager_and_build_system_X что-то вроде:

add_dependency(https://dependency_manager_and_build_system_X/libxxx.git)

Или даже

add_dependecy(http://github/libxxx)

с какой-нибудь конвенцией, что в http://github/libxxx/dependency_manager_and_build_system_X/download_and_build.config лежит поддерживаемый автором конфиг для скачивания и сборки libxxx.

И все работает самостоятельно. Если dependency_manager_and_build_system_X станет достаточно популярным, что большинство людей будет дополнительно к коду своего софта выкладывать эти конфиги, то жизнь станет проще.

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

Вообще, конан хорошо работает именно с смейком.

anonymous, спасибо за исчерпывающий ответ! То, что вы описали - это именно то, чего хочется. Хочется только еще узнать почему выше рекомендован cmake + vcpkg, а не cmake + conan.

Использовать ли конан + смейк или наколхозить чисто на смейке, вопрос философский.

Теперь стало еще понятнее.

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

Bazel, только он.

Ой, я после gerrit’а боюсь google’овских монстров. Bazel имеет репозиторий с конфигами для скачивания и сборки? Ну т.е. умеет ли он то, что описал anonymous выше:

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

?

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

Следом вы, желая использовать мою libxxx просто указываете в dependency_manager_and_build_system_X что-то вроде:

add_dependency(https://dependency_manager_and_build_system_X/libxxx.git)

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

 [requires]
 poco/1.9.4
 zlib/2.0.0

 [generators]
 cmake

и волшебную строчку в свой cmake файл include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)

Все, в 90% случаев для простых проектов этого достаточно.

затем просто запускаешь

mkdir build
cd build

conan instal ..
cmake ..
cmake . --build

и все будет работать. Если же надо чего-то большего, то у конана есть официальная документация-книга, пишушщаяся самими авторами. Там все довольно подробно расписано.

Хочется только еще узнать почему выше рекомендован cmake + vcpkg, а не cmake + conan.

Без понятия. Я vcpkg не пользовался.

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

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

?

У конана есть публичный центральный репозиторий (типа как у тех же линуксов), где лежат уже собранные бинарные популярные либы, конановские правила для них и их исходники.

По умолчанию конан работает с этим репозиторием.

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

Реализаций этих репозиториев несколько. Есть полностью открытая рефернесная реализация, есть проприеритарная бесплатная от атрефактори. Если от артефактори и платная реализация.

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

Есть полностью открытая рефернесная реализация, есть проприеритарная бесплатная от атрефактори.

Еще есть bintray, позволяющий бесплатно размещать публичные репозитории размером до 10 гигов

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

Bazel, только он. Иначе до самой старости свои плюсы будешь собирать

А с ним собирать до старости будут мейнтейнеры дистрибутивов, если проект угораздит оказаться опенсорсным :)

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

Потому что vcpkg более универсальный и все зависимости собираешь сам. При желании можешь экспортировать бинарные пакеты в тои числе в conan (на гитхабе был неофициальный форк vcpkg). Мы сами навелосипедили экспорт в nuget с зависимостями, точно так же можно на основе vcpkg навелосипедить экспорт .deb, .rpm и всего остального.

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

Ты так говоришь, как будто в conan это сделать нельзя, даже примеры есть. И при этом не надо писать логику на ублюдочном cmake-языке

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

Экспорт ты пишешь на c++. Только сборочные скрипты на cmake. Но если у теья проект на cmake то вообще не ясно в чем проблема. Синтаксис не ублюдочнее пистона.

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

Синтаксис не ублюдочнее пистона.

Напорядки хуже питона.

Как визуально (90% встроенных переменных и специалдьных аргументов написаны КАПСОМ блеадь), так и структурно: везде используются списки, но в языке нет списков. Есть строки с точками с запятыми, которые могут интепретироваться по разному.

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

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

Сама документация довольно кривая и неструктурированная. Разработчики этим особо не занимаются. Вместо этого они, вроде как, приложили руки к книге «Mastering CMake», которая существует только в печатной форме. При этом в ней 50-60 страниц какого-то описания работы смейка и 300 страниц тупо перепечатки справки из официального сайта, для того, чтобы набить цену книге.

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

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

Ты уже это говорил. Подсумирую в моей точки зрениы:

  • Симейк редскосное, нечитаемое г..но

  • Узнать, ктот что-то сделать иллжно тольо через сroot/fakeroot

Другое дело, что это выгодно компаниям. Попробует Вася сборку пакетов для libxxx и удивиться, почему libxxx занимающая ок. 10 файлов стоит 10 дискет. Они имают прало портиться прямо в трамвае.

Надо, впрочем, отдать должное: Kings Bounty, Civilizatuin, Another World и т.п. Может американском хомякам подавай (я с ними играл и ипменно так):

  1. Дебильный, а лучше отствующиц сюжет
  2. Геро идут на х… в замо.. Все дальще детыи пора спать.

НО! Тут нкт НИ ОДНОГО ТЗ, НИ ОДНОЙ спецификации. Я имкю право в стена комаров раззмером м кулак, а проститутке приделать тртью грудь. Кто я тогда? Мудак. Епе этот твой девиантант- забыл.

Лучше оставшеемч время (котоого мало посвятить хоте бы на что-нибудь такое: Touchpad_Synaptics)

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

А, не потом надо будешь немного завесьт в задницу, сказать, что это саиый глаиурный клуб Какнализацпромв и кокаиз здеь первый сорт.

"W lazience ktoś się zgrzygał to chyba Toja dzewczyna Moc, energia, amfetamina Półprzytomną na pralce twój ziomeczek zapina Moc, energia, amfetamina W kuchni dwie małolatki ręka cycek ślina ślina Moc, energia, amfetamina A w pokoju ktoś klęknął, z połykiem będzie finał Moc, energia, amfetamina A w pokoju ktoś klęknął, z połykiem będzie finał

dissident ★★
() автор топика
Последнее исправление: dissident (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.