Wydano wydanie narzędzi do budowania Qbs 1.21. To ósme wydanie po zakończeniu współpracy z Qt Company, przygotowane przez społeczność zainteresowaną kontynuacją rozwoju Qbs. Do kompilacji Qbs wymaga Qt jako zależności, chociaż sam Qbs jest zaprojektowany do organizowania budowy wszelkich projektów. Qbs używa uproszczonej wersji języka QML do określania scenariuszy budowy projektu, co pozwala na definiowanie wystarczająco elastycznych zasad budowy, w które można włączyć zewnętrzne moduły, korzystać z funkcji JavaScript i tworzyć dowolne zasady budowy.
Język skryptowy używany w Qbs jest dostosowany do automatyzacji generowania i analizowania scenariuszy budowy w zintegrowanych środowiskach programistycznych. Ponadto, Qbs nie generuje plików make, a sam, bez pośredników, takich jak narzędzie make, kontroluje uruchamianie kompilatorów i linkerów, optymalizując proces budowy na podstawie szczegółowego grafu wszystkich zależności. Posiadanie początkowych danych o strukturze i zależnościach w projekcie pozwala na efektywne równoległe wykonanie operacji w kilku wątkach. Dla dużych projektów, składających się z dużej liczby plików i podkatalogów, wydajność ponownej kompilacji przy użyciu Qbs może znacznie przewyższać make — ponowna kompilacja odbywa się niemal natychmiastowo i nie zmusza programisty do marnowania czasu na oczekiwanie.
Przypomnijmy, że w 2018 roku decyzją firmy Qt Company zaprzestano rozwoju Qbs. Qbs rozwijał się jako zamiennik qmake, ale ostatecznie zdecydowano się na użycie CMake jako głównego systemu budowy dla Qt w dłuższej perspektywie. Rozwój Qbs trwa teraz w formie niezależnego projektu, wspieranego przez społeczność i zainteresowanych programistów. Do rozwoju nadal wykorzystywana jest infrastruktura Qt Company.
Główne nowości Qbs 1.21:
- Zmieniono mechanizm dostawców modułów (generatorów modułów). Dla frameworków takich jak Qt i Boost można teraz używać więcej niż jednego dostawcy, określać, którego dostawcę uruchomić za pomocą nowej właściwości qbsModuleProviders oraz ustalać priorytet przy wyborze generowanych przez różnych dostawców modułów. Na przykład można wskazać dwóch dostawców „Qt” i „qbspkgconfig”, z których pierwszy spróbuje wykorzystać instalację Qt użytkownika (poprzez wyszukiwanie qmake), a jeśli taka instalacja nie zostanie znaleziona, drugi dostawca spróbuje użyć Qt dostarczanego przez system (poprzez wywołanie pkg-config): CppApplication { Depends { name: „Qt.core” } files: „main.cpp” qbsModuleProviders: [„Qt”, „qbspkgconfig”] }
- Dodano dostawcę „qbspkgconfig”, który zastąpił dostawcę modułów „fallback”, próbującego stworzyć moduł za pomocą pkg-config, jeśli poszukiwany moduł nie został wygenerowany przez inne dostawców. W przeciwieństwie do „fallback” w „qbspkgconfig” zamiast wywołania narzędzia pkg-config wykorzystywana jest wbudowana biblioteka C++ do bezpośredniego odczytu plików „.pc”, co pozwala przyspieszyć pracę i uzyskać dodatkowe informacje o zależnościach pakietów, niedostępne podczas wywołania narzędzia pkg-config.
- Dodano wsparcie dla specyfikacji C++23, określającej przyszły standard C++.
- Dla narzędzia GCC dodano wsparcie dla architektury Elbrus E2K.
- Dla platformy Android dodano właściwość Android.ndk.buildId, umożliwiającą nadpisanie domyślnej wartości dla flagi linker’a „—build-id”.
- W modułach capnproto i protobuf wprowadzono możliwość korzystania z runtime’ów dostarczonych przez dostawcę qbspkgconfig.
- Rozwiązano problemy z monitorowaniem zmian w plikach źródłowych na platformie FreeBSD, które pojawiały się z powodu odrzucania milisekund przy ocenie czasu zmiany pliku.
- Dodano właściwość ConanfileProbe.verbose, ułatwiającą debugowanie projektów korzystających z menedżera pakietów Conan.
Dodatkowo warto odnotować rozpoczęcie alfa-testów frameworka Qt 6.3, w którym wprowadzono nowy moduł „Qt Language Server” z obsługą protokołów Language Server i JsonRpc 2.0, w module Qt Core dodano dużą ilość nowych funkcji, w module Qt Quick Dialogs zaimplementowano typ QML MessageDialog do korzystania z dialogów platformy, w module Qt Wayland Compositor dodano kompozytowy serwer Qt Shell i API do tworzenia własnych rozszerzeń interfejsu użytkownika.
W module Qt QML zaprezentowano implementację kompilatora qmltc (kompilator typów QML), który umożliwia kompilację struktur obiektów QML do klas w języku C++. Dla komercyjnych użytkowników Qt 6.3 rozpoczęto testowanie produktu Qt Quick Compiler, który oprócz wcześniej wspomnianego kompilatora typów QML zawiera kompilator skryptów QML, umożliwiający kompilację funkcji i wyrażeń QML do kodu w C++. Zauważono, że zastosowanie Qt Quick Compiler zbliży wydajność programów opartych na QML do programów natywnych; w szczególności przy kompilacji rozszerzeń odnotowano skrócenie czasu uruchamiania i wykonania o około 30% w porównaniu do użycia wersji interpretowanej.
Źródło: opennet.ru
