Bu konu hakkında yerli veya yabancı bir çok kaynak bulabilirsiniz. Bu yazıda onlardan biri olacak. Fakat ben biraz daha içine tecrübe ve düşünce serpilmiş olanından yazmak istiyorum. Daha önce QT ile çalışmamış bir çok C++ geliştiricisi Qt Creator ile Qt’nin aynı olduğunu düşünüyor. Fakat Qt Creator, Qt kütüphaneleri kullanılarak geliştirilmiş olan bir IDE , QT ise bir kütüphaneler topluluğudur. Diğer bir değişle; Qt, C++ dilinde yazılmış, içerisinde GUI geliştirme araçları ve bir çok kütüphane bulunan bir framework dür ve Qt de yazılım geliştirmek için illa Qt Creator gerekmez. Aslında Qt, C++ için geliştirilmiş en büyük grafik arayüz framework’üdür diyebilirim. O kadar ki 2D ve 3D grafik motorlarına sahiptir ve içerisinde envai çeşit geliştirme aracı bulunur. İşin en güzel yanı ise Qt’nin açık kaynak kodlu olması ve Qt kullanarak her türlü cihaza yazılım geliştirebiliyor olmanız. Hatta son zamanlarda Qt, deklaratif olarak geliştirdiği QmI dilinde de epey bir yol katetti. Qml, kendi branşındaki xml ve deklaratif JS gibi dillere oldukça benziyor ve size her türlü cihaz için şık GUI’ler tasarlayabilme olanağı sunuyor. Bu sayede geliştirdiğiniz yazılımların frontend tasarımını Qml kullanarak ve backend kısmını C++ kullanarak geliştirme yapabiliyorsunuz. Fakat tabi ki her güzel şey gibi bunun da belli başlı zorlukları mevcut. Özellikle Qt ile yazdığınız programı belli cihazlara derlemek bazen gerçekten zor ve problemli olabiliyor. Ama yine de günün sonunda çektiğiniz bu zorluğa değiyor.
QT’yi belli bir cihaza derlemek için öncelikle Qt’nin kaynak koduna ve daha sonra derlemek istediğiniz cihazın derleyici ve kütüphanelerine ihtiyacınız var. Ben bu yazıda ARM-Linux için derleme işleminden bahsedeceğim. Eğer Gömülü Yazılımcıysanız bir çığ gibi büyüyen ARM-Linux geliştirme ortamlarından zaten Linux ve ARM konusunda bilgi sahibi olmama ihtimaliniz yok. Bu yüzden hemen sadede geliyorum. Öncelikle kullandığınız ARM işlemcisi için uygun olan QT sürümünü belirlemelisiniz. Çünkü QT’nin son sürümleri, ARM için geliştirilmemiş olan bir çok farklı kütüphaneye bağımlı olabilir. Bu dependency problemi günün sonunda sizi çileden çıkarabilir. Örneğin ben Qt 5.14 sürümünün ARM 64 için kullanılabildiğini teyit ettim. Bu gibi şeyleri release notlardan okuyarak ve deneyimleyerek bulabiliyorsunuz maalesef. Fakat Qt 5.15 ve 6 sürümlerinin halen Arm 64 için mevcut olmayan birçok kütüphane paketine bağımlı olmasından henüz derleyemedim. Gerçekten geliştirilen yazılımın bu gibi belli başlı yazılım bileşenlerine ve kütüphanelere bağımlı olması, yazılımı durduğu yerde çürüyen ve dinazorlaşan bir meta haline getiriyor.
Qt de yazılım geliştirirken bilinmesi gereken belli başlı bir kaç şey var. Bunlardan en önemlisi Qmake tir. Qmake, cmake gibi bir make dosyası üreticisidir. Derlenecek yazılımın konfigürasyonlarının yapıldığı, sınıf ve belli başlı Moc dosyası gibi çevresel meta-object sistemlerini bir araya getirerek bir make dosyası üretir. Qt kendi içerisinde birden fazla farklı bileşen içerdiğinden Qt de derleme işlemi sırasında Qmake kullanmak işi baya kolaylaştırıyor. Tabi eğer Qt Creator kullanıyorsanız, Qt Widget Uygulaması geliştirmek için ilgili derleyici ile derlenmiş bir Qmake şart koşulur. Fakat temelde Qt kullanarak geliştirilen yazılımı derlemek için cmake gibi başka make dosyası üreticileri veya farklı IDE’ler kullanılabilir. Bunun için moc dosyalarının ne olduğunu bilmek gerekiyor.
Moc(Meta-Object Compiler), Qt’nin C++ için geliştirdiği signal-sIot mekanizmasını içeren meta-object system gibi uzantılarını işlemek için kullandığı bir programdır. GUI ile c++ fonksiyonlarının etkileşimi, signal-slot mekanizmasıyla sağlanır. Temelinde Qt de Xml kullanılarak oluşturulan GUI yani ui design dosyaları derleme zamanında ayrı bir C++ sınıfına çevrilir. Ve çalışma zamanında, QUILoader sınıfı, bu sınıfları kullanarak GUI yi oluşturur. Yani, Qt için oluşturulan design dosyaları ayrı bir c++ sınıfı gibi düşünülebilir. Bu sınıfların backend tarafında geliştirici tarafından yazılmış c++ sınıfları ile etkileşimi signal-slot mekanizması ile olur. Bu mekanizmayı derleme zamanında kuran moc’tur. Qt’nin içerisindeki moc aracı, C++ header dosyalarını okur ve içerisinde Q_OBJECT Macro’su tanımlanmış sınıfları çıkarır. Ve bu sınıflardan signal-slot mekanizmasının uyarlandığı bir kaynak C++ dosyası oluşturur.
Qt’yi derlediğinizde Qt de yazılım geliştirmek için gerekli olan bu moc ve Qmake gibi araçları da derlemiş olursunuz. Sıra geldi şimdi sıkıcı olan derleme aşamalarına. Öncelikle yazılım geliştirmek için en uygun ortamın Linux olduğunu düşünüyorum. Bu sebeple bu derleme işlemini Debian 10,3 buster üzerinde anlatacağım.
- ilk aşamada bize Arm 64 derleyicisi gerekiyor. Şu şekilde indirilebilir ve cihaza kurulabilir.
sudo apt install gcc-aarch64-linux-gnu sudo apt install g++-aarch64-linux-gnu
2. Daha sonra Qt’nin ilgili sürümünün kaynak kodunu indiriyoruz. Kaynak kodunu buradan indirebilirsiniz. Ben 5.14.2 sürümünü indirdim. İlgili sürümün altında yer alan single dizinindeki zip dosyasını indiriyoruz. Single dizini gerekli çoğu Qt modülünü içerir.
3. İndirdiğimiz Qt kaynak kodunun içerisinde configure dosyası bulunur. Bu dosya derleme işlemi için gerekli make dosyası üretir. Configure dosyasını arm 64 için derleme yapacak şekilde çalıştırmamız gerekiyor. Qt nin destekledigi platformlar ve derleme işlemi için uygun make dosyası üretmek için gerekli konfigrasyonlar mkspecs dizininde bulunur. Bu dizine göz atarak Qt’nin hangi platformları desteklediğini öğrenebilirsiniz. Arm64 için bu dizinde aarch64 klasörü bulunur. Bu dizinin içinde uygun make.conf dosyası vardır. Bu dosyaları kullanarak configure scriptini çalıştırıyoruz, Ve daha sonra üretilen make dosyası ile derleme işlemini gerçekleştiriyoruz.
./configure -embedded arm -xplatform qws/linux-aarch64-g++ <other options> make make install
4. Konfigürasyon veya derleme sırasında bazı eksik paket ve bağımlılık hataları verebilir. ilgili paketleri sisteme kurmak için apt install — fix-broken komutunu kullanın.
5.Derleme bittiğinde bin klasörü altında ilgili derleyici için kullanılacak Qmake ve çeşitli araçlar oluşur. Ayrıca gerekli kütüphaneler de oluşur. Eğer “make install” komutunu kullanırsanız ilgili kütüphane ve araçlar sistemin varsayılan dizinine kopyalanır. Bu saatten sonra derlediğiniz Qmake gibi araçları ve kütüphaneleri kullanarak arm64 için derleme yapabilirsiniz.
6.Qt içerisinde QmI ve Qtchart’s gibi geliştirme için ekstra GUI araç ve kütüphane modülleri bulunur. Bu modülleri yukarıda verdiğim linkten ayrıca indirip derleyebilirsiniz.
Kolay Gelsin 🙂