Building Qt Framework from Source (Windows) dan Deploy Project-nya

Mengompilasi Kode Sumber Qt di Windows 7

Kali ini saya berbagi cara instalasi Qt Framework dengan megompilasi sendiri kode sumbernya. Tujuannya adalah mendapatkan hasil aplikasi yang sesuai dengan keinginan kita, dalam hal ini kebutuhan untuk deploy.

Pertama tentunya unduh kode sumber Qt di sini, cari yang ZIP ‘for Windows’, kira-kira berukuran 280-an MB (Qt 5.3).

Sediakan prasyarat

Sesuai dengan dokumentasi resmi ada di sini, kita membutuhkan:

  1. ActivePerl – Install a recent version of ActivePerl (download page) and add the installation location to your PATH.
  2. Python – Install Python from here and add the installation location to your PATH in order to be able to build Qt WebKit.
    • Jika kita memilih installer MSI, instal python dengan perintah msiexec /i python.msi di cmd dengan akses administrator.
  3. Install Ruby from here and add the installation location to your PATH in order to be able to build Qt WebKit.

Tentunya MSVC harus sudah terinstal. Saya menginstal MS Visual Studio C++ 2010 Express. Jika belum punya, unduh file installer dari sini.

Alternatif dari MSVC adalah MinGW. Tapi tidak saya bahas di sini, karena saya pun belum pernah mencobanya.

Mempersiapkan lingkungan

Seperti pada laman dokumentasi instalasi resmi, kita perlu mempersiapkan environment untuk kompilasi ini. Tempat kerja utama adalah folder di mana kode sumber diekstrak.

Pertama, buat file skrip bernama qt53vars.cmd (sesuaikan namanya) berisi:

REM Set up Windows SDK for 64bit
CALL "C:\Program Files (x86)\MSVC10\VC\vcvarsall.bat" amd64
set PATH=c:\qt\qt-5\qtbase\bin;c:\qt\qt-5\qtrepotools\bin;c:\qt\qt-5\gnuwin32\bin;%PATH%
set QMAKESPEC=win32-msvc2010

Saya ganti sesuai kebutuhan saya:

REM Kompilasi Qt Framework from source Windows 7 32bit
CALL "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
set PATH=d:\develop\qt-lib\5.3.0\qtbase\bin;d:\develop\qt-lib\5.3.0\qtrepotools\bin;d:\develop\qt-lib\5.3.0\gnuwin32\bin;%PATH%
set QMAKESPEC=win32-msvc2010

Lalu buat pintasan desktop untuk membuka command prompt dengan variabel lingkungan dalam file skrip di atas.

membuat shortcut

Pada jendela seperti gambar di bawah ini, saya memasukkan:

%SystemRoot%system32cmd.exe /E:ON /V:ON /k d:\develop\qt-lib\qt53vars.cmd

Yang tersorot adalah tempat file skrip bat di atas.

membuat shortcut 2

Edit pintasan barusan: klik kanan, pilih Properties. Pada ruas Start In: isikan tempat kerja yakni folder di mana kita mengekstrak kode sumber Qt.

Mulai mengompilasi

Proses kompilasi kita lakukan di konsol cmd dengan mengeksekusi (double click) pintasan yang kita buat tadi. Setelah muncul jendela konsol, perintah pertama adalah configure.

configure -opensource -confirm-license -platform win32-msvc2010 
-make libs -qt-libjpeg -qt-libpng -no-openssl -no-icu -qt-zlib 
-qt-pcre -no-iconv -nomake examples -nomake tests -no-angle 
-opengl desktop -no-rtti -no-dbus -strip -plugin-sql-sqlite 
-skip qtconnectivity -skip qtlocation -skip qtsensors -skip qtx11extras

Argumen paling penting di sini (untuk saya) adalah -no-icu yang nantinya ketika deploy kita tidak perlu menyertakan icudt51.dll yang ukurannya lumayan besar. Jika anda ingin menyertakan library itu, tetapi ingin deploy lebih simple, ganti argumen itu dengan -static yang nantinya file exe tidak perlu menyertakan file dll lagi karena sudah berpadu.

Jika sukses, lalu kita mulai make. Inilah proses terlama yang akan dijalankan. Secara default, Qt menggunakan nmake, tapi kita akan menggunakan jom sebagai gantinya. Menurut beberapa sumber, jom bisa mempercepat proses kompilasi dengan mengoptimalkan penggunaan core prosesor. Unduh jom dari sini, lalu ekstrak file jom.exe ke folder ekstrak-an Qt tadi. Lalu jalankan perintah:

  jom

Proses yang panjang akan dimulai, siap-siap untuk tidur atau membaca sambil ngemil atau lainnya. Proses kompilasi ini lamanya berjam-jam, tergantung spek komputer kita.

proses kompilasi qt framework

Jika proses selesai, kita tinggal menambahkan qmake ke Qt Creator sebagai build-kit untuk mem-build project. Kompilasi memekarkan ukuran seluruh file kode sumber yang semula unduhan 280-an MB menjadi sekitar 4 GB. Untuk membersihkan sisa kompilasi atau untuk menghemat ruang hardisk, perintah jom clean sangat ampuh, bisa menghapus setengahnya.

Kompil Dokumentasi

Jika anda masih mau kompil-kompil lagi, tidak ada salahnya mengompilasi dokumentasi yang nanti diiintegrasikan ke dalam Qt Creator. Yang perlu dikompil adalah linguist dan qhelpgenerator yang ada di folder qttools.

qt compile doc qch

Setelah rampung kompilasi, tambahkan file-file QCH itu ke Qt Creator. Tambahkan melalui menu Tools > Options > Help > Documentation. Baca sini untuk keterangan lebih lanjut. Dan menurut halaman ini, secara otomatis examples akan terindeks di Qt Creator juga.

Deploy (Menyebarkan) Proyek Qt yang Sudah Dikompilasi

Hasil kompilasi yang sebaiknya di-deploy adalah kompilasi tipe Release. Jadi, build-lah project dalam mode Release.

qt build release

Dalam folder build, dalam subfolder Release akan dihasilkan file exe project yang ukurannya lebih kecil daripada build mode Debug.

Menggunakan NSIS sebagai packager

Dalam tulisan ini, saya akan memberi contoh sederhana untuk men-deploy hasil kompilasi itu dengan NSIS. (Juga sebagai pengingat untuk saya).

Selain file exe, saya butuh library utama Qt Framework. Dan karena saya sudah mengompilasi sendiri pustaka Qt sebagaimana sudah dijelaskan di atas, maka kali ini saya hanya butuh 5 (lima) file DLL saja: Qt5Core.dll, Qt5Gui.dll dan Qt5Widgets.dll, plus qwindows.dll dalam folder plugins/platforms serta Qt5Sql.dll.

Saya punya contoh skrip NSIS seperti ini:

#Copy this file into release build folder, then run NSIS and open this file

#Hide All NSIS Windows
WindowIcon Off
#Enable silent mode
SilentInstall Silent
#AutoClose after exit
AutoCloseWindow True
#package icon
Icon "icon-hi.ico"
#package exe name
OutFile AdolPulza_beta.exe

RequestExecutionLevel user

Section
    #create a directory for the app in TEMP
    StrCpy $INSTDIR $APPDATA\AdPulza

    #Use that directory created in TEMP as the working directory
    SetOutPath $INSTDIR

    #Files to be included in the package
    File "AdolPulza.exe"
    File "Qt5Core.dll"
    File "Qt5Gui.dll"
    File "Qt5Widgets.dll"
    File "adolpulza.sqlite"
    File /r "plugins"
    File "Qt5Sql.dll"

    #change some attributes
    #SetFileAttributes "$INSTDIR\libEGL.dll" SYSTEM|HIDDEN  
    #SetFileAttributes "$INSTDIR\libGLESv2.dll" SYSTEM|HIDDEN

    System::Call 'Kernel32::SetEnvironmentVariable(t, t) i("QT_PLUGIN_PATH", "$INSTDIR\plugins").r0'
    StrCmp $0 0 error
    #launch the main EXE inside the package
    ExecWait "$INSTDIR\AdolPulza.exe"
    Goto done
error:
  MessageBox MB_OK "Can't set environment variable"
done:
    #change working directory
    SetOutPath $APPDATA

    #remove working directory
    RMDir /r $INSTDIR
SectionEnd 

Saya simpan file tersebut di folder build release. Lalu cukup klik kanan dan pilih Compile NSIS Script, karena sudah instal NSIS.

qt packing with nsis

Skrip di atas mengompres sejumlah file yang ditentukan menjadi satu file exe yang portabel. Yang sebenarnya jika file itu dieksekusi, dia akan mengekstrak file-file tadi ke folder AppData seperti terlihat pada gambar di bawah ini.

eksekusi program qt

Karena portabel, maka saat program ditutup, file yang diekstrak juga akan dihapus.

File contoh deployment bisa diunduh dari sini.

Tambahan

Karena contoh program ini di-build menggunakan MSVC, kita juga perlu menyertakan Microsoft Visual C++ 2010 Redistributable. Ini terindikasi atas error semacam: “MSVCP100.dll was not found”.

error msvcp100.dll missing

Advertisements

Published by

Badwi

A Muslim, sober, a Javanese

7 thoughts on “Building Qt Framework from Source (Windows) dan Deploy Project-nya”

  1. kalau pengen gak pake gui sama sekali tapi tetep bisa ngoding make notepad++ bik kompiler beremmah caranya mendeploy e…
    aku pengen melepas ketergantung ngoding ke IDE.

    1. saya sendiri belum bisa move on dari qt creator om.
      kalau gak mau pake IDE, ya yang penting tahu perintah-perintah CLI untuk compile. selain notepad++, juga main cmd atau terminal console

      1. gimana itu om?
        aku mau pengen move on dari gui, sudah sangat addict sama gui ala vb6 akunya brow, saat ini malah kena batunya, aku gak berkembang sama sekali, serasa mentok.

      2. sampean lebih master ternyata..
        sungkem dulu ah.. -/\-;

        command line compile yang “g++ -o executable.exe main.cpp” itu lho om. silakan googling sendiri ya.. 🙂 saya pun belum paham yang begituan ternyata

Share your idea here (markdown enabled)

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s