Comments 54
Qbs конечно хорош, но все конечно дело привычки. Читать его удобно и понятно, а вот писать задуманное — не сразу удается, т.к. мало информации. В любом случае думаю попробовать на каком-нибудь небольшом проекте его стоит.
qmake занимала около 40-50 минут, qbs же пересобирает в среднем за 15, т.к. грузит все ядра процессора
А как так получается? У меня «qmake» (на самом деле просто «make») тоже исспользует все ядра:
cd build
qmake ..
make -j12
Там где Ninja- используем свою систему распределенной сборки, я ее уже чуток пиарил на хабре: https://github.com/mapron/Wuild/. Ну и для makefiles/xcode она тоже (хоть и немного менее эффективно) годится.
qbs не устраивает по двум параметрам: слабая интеграция с произвольной IDE (точнее — никакая, вмерджен только начатый мной же патч для VS — и это спустя 2 года!), отсутствие интеграции с системами распределённой сборки; отсуствие коммьюнити/внятной поддержки в mailing list. По cmake туева куча готовых решений.
Синтаксис? Да, qbs им прекрасен. Кода на нем писать придется меньше и он будет читаемее. Но увы, этого маловато(
не стал основной системой сборки для qtимеете ввиду что он не предлагается в creator как система сборки проектов по умолчанию и доступна только при включении плагина, то этот вопрос думаю следует адресовать разработчикам этого продукта.
Qbs — определенно лучше qmake, но он не герболайф — у него тоже есть некоторые недостатки и иногда возникают неясные моменты в его работе. Например, иногда он не может на ровном месте создать каталог сборки продукта собираемого по моим правилам — или конечно я чего-то не указываю. Все сводится к тому,
что много чего не документировано, а если и документировано, то местами лучше бы этого не делали ))
При nokia такого не было. Понабрали хипстеров и забили на документацию
А неясных моментов и багов на ровном месте (типа «не тот z поставили» или «забыли что наша библиотека имеет несколько способов создания объектов») в qt что-то в последнее время стало сильно больше, видимо вы правы про нокию (а может я старею и стал занудой, потому как субъективно кажется что это не только с qt такая проблема)
А так — я сидел плевался с 64-битным mingw с вылезающими багами в 1.6,1.7, 1.8 — конечно, прикольно что можно все в js файлах поправить, не пересобирая, но все же…
Но вот если бы Qt Project на его разработку выделяло не 1.5 разработчика (или даже меньше), а чуть побольше
Open Source же. Кто хочет, тот может присоединиться к разработке. Малое количество разработчиков говорит о малом интересе.
Малое количество разработчиков говорит о малом интересе.Я думаю, небольшой интерес вызван тем, что сами разработчики не знают, чего хотят от qbs и будут ли они его развивать в дальнейшем вообще. Это по состоянию на сентябрь 2016, соответсвенно и сообщество не спешит инвестировать в проект с неясным будущим.
QtC тоже начинался как проект энтузиастов (примерно как мега-демка того что умеет Qt), но потом в него стали реальные ресурсы вкладывать => получился через несколько лет приличный результат. И да, я выводы свои делаю не только на основе релизов, но так же на основе рассылки, обсуждений в тикетах, комментах в пуллреквестах, я так понимаю, многие QtC разработчики скептично к нему относятся (мол, надо реальные штуки для пользователей пилить, а вы какие-то оптимизации билдграфа делаете и мутите dynamic-variadic-Rules которые хз кому нужны) — сильно перевираю цитату, Oswald в комментах какомуто задеклайненному реквесту писал, в начале 2016 года (тогда еще не влили msvs генератор)
По умолчанию (и это не изменить) qbs собирает всё в загогулистую подпапку папки билда. Лучше всегда указывать destinationDirectory. Зато если destinationDirectory указан, временные файлы этапа компиляции не перемешиваются с таргетами.
Он пока еще не в полной мере поддерживает функционал qmake (пример: TYPELIBS).
Часть функционала не документирована или документирована недостаточно (пример: qbs.installSourceBase)
Лично у меня введение дополнительных этапов сборки зачастую вызывали затруднения (скажем, «выполнить somescript в процессе сборки, после компоновки»). Добавлять свои скрипты к install step нельзя
Списковые свойства (типа cpp.includePaths,cpp. dynamicLibraries и пр.) в разных контекстах могут не доопределяться, а переопределяться (доопределение в случае изменения Export или Depends на модуль; переопределение при «наследовании»).
qbs накладывает ограничения на иерархию файлов проекта. (пример: qbs-ники модулей обязаны лежать в qbsSearchPaths+"/modules/MyModuleName/MyModuleName.qbs"). Сабмодули не документированы.
Ругается на «некошерное» использование некоторого API (пример: File.DirectoryEntries)
При запуске из-под QtCreator не поддерживает console.log. Дебажить приходится через throw.
Это список тех подводных камней, с которыми я часто встречаюсь. В моём понимании, процесс билда завершен только когда приложение можно отдавать пользователю. qmake файлы трудно читать, но он пока еще более гибкий.
console.error("message")
property bool test: {
console.log("log")
console.info("info") // "info" | "info" -> General messages
console.debug("debug")
console.warn("warning") // "WARNING: warning" | "warning" -> Issues, warning
console.error("error") // "ERROR: error" | "error" -> Issues, warning
throw "exception" // "ERROR: exception" | "exception" -> Issues, error
}
Еще вывод throw почему-то содержит что-то вида " at () in… at () in ...".
Итого: console.log|console.debug не выводится, остальным в принципе можно пользоваться. Спасибо за наводку
Я всё таки не понимаю, почему в Qt решили создавать qbs, а не перейти на cmake? Я просматривал пост разработчиков, где они обсуждают cmake, но кроме «нет того, чего нам хотелось бы» никаких причин не увидел. Так и хочется ответить: «Ну так пользуйтесь тем, что есть»! Мне как разработчику очень не хочется изучать ещё одну систему сборки, которую я смогу использовать только для qt-проектов и то не понятно когда, т.к. qbs до сих пор не стал основной системой сборки даже для Qt. Я бы понял, если бы они решили сделать киллера cmake, не завязанного на Qt, а претендующего на замену cmake во всех его основных нишах, но для этого нужно выделить кучу ресурсов, чего не видно.
We are thinking about switching build systems. We don't know what to do yet…
Мне как разработчику очень не хочется изучать ещё одну систему сборки, которую я смогу использовать только для qt-проектов
так он же не только для qt-проектов
К примеру, я не смог найти механизма поиска внешних зависимостей аналогичного find_package() в cmake. Как собирать приложение с boost и python bindings, к примеру, в ручную для каждой платформы всё прописывать? И это я ещё не отошел от c++.
Я всё таки не понимаю, почему в Qt решили создавать qbs, а не перейти на cmake?
Как бы CMake Manual в официальной документации, да и cmake модули поставляются с Qt.
Они это кто? Digia, KDE Free Qt Foundation или кто-то еще?
(Tobias) Cmake is the «worst» system in Qt Creator because CMake doesn't give enough feedback to the IDE. We need first-class support for CMake in Qt Creator...
Мне кажется, сделать убийцу cmake было бы здорово, но для этого нужно много ресурсов и, как минимум, нужно поставить такую цель. А делать buid-system с мыслью что она будет использоваться только в контексте Qt — странная затея, на мой взгляд.
Как бы не стоит мешать Qt и QtCreator.
Мне кажется, сделать убийцу cmake было бы здорово, но для этого нужно много ресурсов и, как минимум, нужно поставить такую цель
А кому это нужно? Я у вас пытаюсь узнать, какая из компаний пилит этот Qbs. В итоге непонятно, кому этот проект нужен и для чего.
Как бы есть еще KDE Free Qt Foundation, только и KDE использует CMake.
Так вон и 2гис qbs использует вовсю — толку-то?
Как я понял, изначально qbs родился как замена qmake, который стало слишком сложно поддерживать, о чем Trolltech писали ещё в 2009 (или раньше). Qmake, на сколько я могу судить, никогда не претендовал на то, что бы стать универсальной билд-системой типа cmake, а чисто занимал нишу билд-тула для Qt-проектов. Соответсвенно, поскольку qbs начался как наследник qmake — можно подумать, что его нацеливали в ту же нишу. Однако в этой нише он, имхо, не нужен т.к. сегодня у нас есть cmake. Но и чёткой цели создать конкурента cmake перед qbs тоже, похоже, не поставили.
cmake не слишком удобен
И что же это KDE Free Qt Foundation, которая отвечает за развитие open source версии Qt, не взялось за это, а использует "неудобный" CMake?
А чисто красивого синтаксиса и скорости не достаточно, есть ведь tup, но что-то я не вижу что бы он заменил cmake.
Потому что не считают, что создание более удобного build-tool
Это все очень субъективно.
но и как-то обеспечить поддержку нескольких в IDE
Это проблема конкретных IDE поддержать инструменты иначе это уже не Integrated Development Environment
Это проблема конкретных IDE поддержать инструменты иначе это уже не Integrated Development EnvironmentНу почему же, Integrated не означает Ultimately Universal. Integrated значит что то, что поддерживается — хорошо интегрировано с другими поддерживаемыми инструментами. В каких IDE есть нормальная поддержка qbs? Кроме того, я не уверен, что разработчик предпочтёт отказаться от любимой IDE в пользу любимого build-tool. Что бы IDE стали поддерживать build-tool, tool должен быть достаточно важным, а что бы этого добиться нужно приложить немало усилий, и создание плагинов для популярных IDE скорее всего положительно отразится на развитии самого тула, и увеличит вероятность того, что и другие IDE тоже станут его поддерживать. Поэтому мне кажется, что разработчики нового билд-тула более заинтересованы в разработке плагинов под популярные IDE, чем разработчики этих IDE.
Что-то разработчики make не оттачивают плагины к MSVS, Xcode, CodeBlocks, CLion, Eclipse.
разработчик ninja тоже как-то не задумывается о плагинах =)
если хотите проводить такую же аналогию то лучше подойдут autotools. Ну и да, там разработчики сильно не заморачивались, и посмотрите сколько использует autotools и сколько — cmake. Я для сборки ffmpeg написал cmake-скрипты только чтобы была возможность отладки в IDE удобным путем =)
Вообще, на самом деле еще все очень сильно зависит от устоявшейся ситуации на рынке. Допустим, если я сейчас напишу свою IDE для C++, то будет очень странно, если там не будет интеграции с cmake и возможности сборки через make или ninja (лучше если оба). Если этого нет — то сразу количество моих пользователей резко падает. Соответственно, разработчики cmake уже будут незаинтересованы.
У IDE XCode и VS — большая аудитория. Много разработчиков их использует и к ним привыкли. Если я делаю свою супер-пупер крутую систему сборки, которая рвет конкурентов и все такое — но забываю про удобную интеграцию с популярными IDE — я теряю своих пользователей. У меня нет пользователей — разработчики IDE не хотят заморачиваться с поддержкой меня) замкнутый круг.
Посмотрите на решения от Xoreax — они предлагают интеграцию с целым рядом сборочных систем (про качество и цену я сейчас умолчу — но сам подход я считаю верным).
В итоге — либо ты обладаешь большой аудиторией и можешь другим навязывать свою стратегию, либо подстраиваешься под других, если хочешь выползти наверх. Хорошо, плохо, аморально ли это — это за пределами моего утверждения.
Да, в «топе» могут держаться далеко не идеальные системы сборки и IDE =) но зато это дает больше шансов «ворваться» кому-то еще.
об интеграции IDE думать не приходилось.
Всем фиолетово.
Допустим, если я сейчас напишу свою IDE для C++
А может лучше вы поможете в разработке qbs, вместо того, что бы жаловаться про 1.5 разработчика.
Соответственно, разработчики cmake уже будут незаинтересованы.
Откуда интерес, если они не имеют с этого денег?
либо подстраиваешься под других, если хочешь выползти наверх.
Какой верх у open source решений? Сторонние разработчики добавляют в cmake то, что им нужно, а не ждут пока kitware добавит генератор под IDE.
https://bugreports.qt.io/browse/QBS-31
Кхм. Я сделал пуллреквест. Исправил замечания. Можете посмотреть. Потом спросил «чуваки, что еще надо, чтобы он попал в апстрим?» почитайте комменты на геррите.
В итоге спустя 2 года msvs генератор после еще одного рефакторинга (Jake его попилил на большее количество файлов, респект и уважуха, но не принципиально) он таки попал в апстрим.
Может быть для вас это нормальный темп разработки. Но для меня он не сравним с темпом разработки самого Qt, извините. Лично для меня пыл контрибьютить в qbs угас.
А вы начинаете переходить на личности «чего жалуетесь что там мало народу, сами помогайте» — ну простите, как то странно, что сами разработчики должны брать меня в расчет, когда планируют разработку :D
Катаем «смоляной шарик» или создание собственных правил сборки с помощью Qbs