Увидел свет (http://blog.qt.io/blog/2015/04/28/qbs-1-4-0-released/) релиз развиваемого проектом Qt сборочного инструментария qbs 1.4.0 (http://qt-project.org/wiki/qbs) (Qt Build Suite). Qbs использует упрощённый вариант языка QML для определения сценариев сборки проекта, что позволяет определять достаточно гибкие правила сборки, в которых могут подключаться внешние модули, использоваться функции на JavaScript и создаваться произвольные правила сборки. В отличие от qmake, qbs не привязан к Qt и изначально рассчитан на организацию сборки любых проектов.Используемый в qbs язык сценариев адаптирован для автоматизации генерации и разбора сценариев сборки интегрированными средами разработки. Кроме того, qbs не генерирует make-файлы, а сам, без посредников, таких как утилита make, контролирует запуск компиляторов и компоновщиков, оптимизируя процесс сборки на основе детального графа всех зависимостей. Наличие изначальных данных о структуре и зависимостях в проекте позволяет эффективно распараллеливать выполнение операций в несколько потоков. Для крупных проектов, состоящих из большого числа файлов и поддиректорий, производительность повторной пересборки с использованием qbs может опережать make в разы - пересборка выполняется почти мгновенно и не заставляет разработчика тратить время на ожидание.
В новой версии:
- Добавлена (https://doc.qt.io/qbs/android-sdk-module.html) экспериментальная поддержка платформы Android, в том числе для сборки проектов, содержащих нативный код (https://doc.qt.io/qbs/android-ndk-module.html). Специальная поддержка Qt и интеграция с Qt Creator пока отсутствует;
- Добавлен модуль archiver (https://doc.qt.io/qbs/archiver-module.html) для создания сжатых архивов. Данный модуль используется для организации работы компонента InstallPackage (https://doc.qt.io/qbs/installpackage-item.html);- Добавлено новое свойство builtByDefault, позволяющее определить продукты подлежащие сборке по умолчанию и продукты собираемые только при явном запросе. В качестве примера подготовлено приложение AutotestRunner (http://doc.qt.io/qbs/autotestrunner-item.html), предоставляющее функции похожие на "make check";
- Файлы теперь устанавливаются в рамках процесса сборки, что позволяет создавать продукты, работающие с содержимым установочной директории.
URL: http://blog.qt.io/blog/2015/04/28/qbs-1-4-0-released/
Новость: http://www.opennet.me/opennews/art.shtml?num=42122
Тут кстати хорошая (правда хорошая!) про make вышла - http://www.nostarch.com/gnumake
Да, полезная книга. Автору вполне можно доверять - он с make уже долгое время работает.
>> производительность повторной пересборки с использованием qbs может опережать make в разыmake быстр, если используется нерекурсивная система сборки - когда есть одно глобальное дерево зависимостей. Тогда время повторной пересборки крупного проекта, если ничего не менялось - менее секунды.
>В отличие от qmake, qbs не привязан к QtВраньё. Для сборки нужен qmake. Пока qtbase не вытянешь, хрен соберёшь.
Не нужно путать привязку и зависимости.
> Не нужно путать привязку и зависимости.А в чём в данном случае разница?
Отличия в том, что проект не обязан использовать Qt. Например, я успешно перевожу на qbs свои embedded проекты под ARM. А там не только Qt, но и операционки даже нет.
Им кто то вообще пользуется? В интернете информации ноль. Уже 1.4, а по ощущениях 0.4 только.
Мы в продакшене используем. Впечатления положительные.
Мы юзали его, до того как перешли на Gradle :) После CMake впечатления были очень положительные но до Gradle ему ооочень далеко, а учитывая темпы развития Gradle не догонит он его никогда...
Подождите подождите. Gradle? на каком языке программирования написан ваш проект?
Gradle по барабану какой язык проекта. Хоть асм съест. Сам gradle конечно = jvm + groovy
Учитывая темпы развития груви, гредл скоро сдохнет за ненадобностью.
> Им кто то вообще пользуется? В интернете информации ноль. Уже 1.4, а
> по ощущениях 0.4 только.Полностью согласен. Документация такая что лучше бы ее не было. Описаны абсолютно базовые вещи. При нокии такого не было, как понабежали хипстеры в Qt and Co. лютый пистец.
Больше сборочных инструментов для сборки сборочных инструментов!
Кстати, какие сборочные инструменты нормально понимают генерацию сразу нескольких файлов?Все реализации make в этом месте сделаны через задницу, хотя стандарт не запрещает сделать правильно.
> Кстати, какие сборочные инструменты нормально понимают генерацию сразу нескольких файлов?
> Все реализации make в этом месте сделаны через задницу, хотя стандарт не
> запрещает сделать правильно.реализация генерации сразу нескольких файлов на gnu make:
empty :=
define newline
$(empty)
$(empty)
endef# processed multi-target rules
MULTI_TARGETS:=# to count each call of $(MULTI_TARGET)
MULTI_TARGET_NUM:=# when some tool generates many files, call the tool only once
# $1 - list of generated files
# $2 - prerequisites
# $3 - rule
define MULTI_TARGET_RULE
$1: $2;\
$$(if $$(filter $(words $(MULTI_TARGET_NUM)),$$(MULTI_TARGETS)),,$$(eval MULTI_TARGETS += $(words \
$(MULTI_TARGET_NUM)))$$(info generating: $$@)$$(subst $$$$(newline),$$(newline),$(subst \
$$(newline),$$$$(newline),$3$(foreach x,$1,$$(newline)touch $x))))
MULTI_TARGET_NUM += 1
endefMULTI_TARGET_SEQ = $(if $(word 2,$1),$(word 2,$1): $(firstword $1)$(newline)$(call MULTI_TARGET_SEQ,$(wordlist 2,999999,$1)))
# NOTE: don't use $@ in rule because it may have different values,
# don't use $(lastword $^) - tail of list of prerequisites may have different values
MULTI_TARGET_CHECK = $(if $(filter-out $(words x$3x),$(words x$(subst $$@, ,$3)x)),$(info Warning: don't use $$@ in rule:$(newline)$3))$(if \
$(filter-out $(words x$(strip $3)x),$(words x$(subst $$(lastword $$^), 1 ,$(strip $3))x)),$(info Warning: don't use $$(lastword $$^) in rule:$(newline)$3))# when some tool generates many files, call the tool only once
# $1 - list of generated files
# $2 - prerequisites
# $3 - rule
MULTI_TARGET = $(MULTI_TARGET_CHECK)$(eval $(MULTI_TARGET_SEQ)$(MULTI_TARGET_RULE))$(call MULTI_TARGET,a1 a2 a3 a4 a5,dep1 dep2 dep3,echo 1 > a1; echo 2 > a2; echo 3 > a3; echo 4 > a4; echo 5 > a5)
dep1 dep2 dep3:; touch $@
all: a1 a2 a3 a4 a5
clean:; rm -f dep1 dep2 dep3 a1 a2 a3 a4 a5
Проверка:
$ make -f multi.mk -j5touch dep1
touch dep2
touch dep3
generating: a1
echo 1 > a1; echo 2 > a2; echo 3 > a3; echo 4 > a4; echo 5 > a5
touch a1
touch a2
touch a3
touch a4
touch a5
> Больше сборочных инструментов для сборки сборочных инструментов!И книжек, книжек хороших побольше по 300 страниц про то как ими просто и быстро все собирать.
Увы, мeртворожденное пoделие. Лучше cmake пока ничего нет.