Building Qt Desktop for Windows with MinGW

From Qt Wiki
Revision as of 20:17, 27 June 2015 by Wieland (talk | contribs) (Added LangSwitch)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

This chapter will describe some steps to build Qt using a windows host and the MinGW Toolchain. Since there is a 32bit and a 64bit MinGW that can be used to build your Desktop Qt you have to decide if you wanted to build Qt Libraries targetting a x86 (32bit) or a x64 (64bit) machine. Besides there is a possibility to cross build Qt on a 64bit host for a 32bit target and vice versa.

Please look through the prerequisites before you start your work in order to make a definite step building your own Qt. Remark, this guidance here is only for your information. Any hints and comments you can read here are provided to help you to make your own steps with opensource software. There are many more possibilities to do the work. The below build process is only tested with Qt 4.7.4 on a windows 7 x64 host.

Even so this guide has been created some time ago it is still applicable for Qt4. Only a few adaptations are required concerning the references to MinGW compilers. This has been tested on 64 bit windows 7 system for Qt 4.8.4 source building Qt for 64 bit targets. MinGW version was 4.7.2.

Additional questions may be posted here.

Do I need to build Qt?

Perhaps not. The official Qt SDK installer will work just fine. Follow these steps only if you want to learn how to make a cutom build or if you aim a x64 target.

Required Toolchains

To build Qt on your own windows desktop pc there is no wizzard needed. The main thing you want check is to choose the right toolsets that are able to build Qt from bottom up. Since there are many packages to find on the web you have to manage what package is chosen with caution.

The following list will give an overview on the packages you need for your personal build of Qt opensource.

  • The Qt Opensource Source Package with all the sourcecode
  • a MinGW toolchain
  • or a MinGW64 toolchain
  • a Perl installation
  • a tool to replace text in the makefiles (for the install step only)
  • a mingw32-make replacement to use all the cpu cores for building
  • an application to unzip the tarfiles like 7zip.

To work with the newly created Qt you need also:

  • QtCreator 2.5 (or similiar, build process will be provided as well later)

Prerequisites

Although the build processes are very similar, please note that the cmd.exe shell build environment is slightly different for the PATH variable to find the right compiler toolchain. However, these tools are needed for both the build processes, 32 and 64bit:

  • Qt source code from here
  • Active Perl from here. You need ActivePerl-5.14.2.1402-MSWin32-x64-295342.msi". Any other perl might work too, this is the tested version.
  • jom.exe prebuilt from here.
  • fart.exe prebuilt from here. You need "fart199b_win32.zip".

Build Qt with MinGW for a x86 target

This chapter describes on how to build the Qt opensource for a 32bit windows target.

Required toolchain

  • MinGW from the Qt SDK, this is shipped i.e. with the SDK Installer. The toolchain itself runs on 32bit and 64bit windows.
  • The SDK sourcecode used for this tutorial is Qt 4.7.4 (qt-everywhere-opensource-src-4.7.4.zip) and can be found here.

Filesystem setup

Prepare your filesystem for your own build process. There is a batchfile that can build everything automatically. As soon as there will be a place to download you will be noted.

Prepare a tree that contains the tools and the source trees (replace the c:with whatever drive you need). It is recommended not to expand your computers path environment with the tools. Everything will take place in a single cmd.exe windows shell that has a path that fits your needs.

For filesystem setup open windows explorer and create the following folders:

  • set the root to c:–4.7.4 copy the mingw contents of the sdk into c:–4.7.4\mingw32_x86
  • unzip the contents of the qt tar into c:–4.7.4\qt-everywhere-opensource-src-4.7.4
  • install or copy Perl into c:–4.7.4\tools\Perl
  • copy jom.exe into c:–4.7.4\tools\jom
  • copy fart.exe into c:–4.7.4\tools\fart
  • create a build directory for Qt under c:–4.7.4\4.7.4-qt-x86-build
  • step into this build directory and create a file "configure.cache" with the following content (you may want to change for your needs):
 -platform win32-g++ -opensource
 -debug -debug-and-release
 -no-phonon
 -fast
 -nomake examples
 -nomake demos
 -no-dsp
 -no-vcproj
 -no-cetest
 -no-s60
 -qt-sql-odbc -qt-sql-sqlite -plugin-sql-odbc -plugin-sql-sqlite
 -no-qt3support -no-opengl -no-openvg -no-incredibuild-xge

Configure your build tree

  • If you are using MinGW (32bit) toolchain : Open a cmd.exe windows shell, cd into c:–4.7.4\4.7.4-qt-x86-build and type:
set PATH=C:4.7.4\mingw32_x86\bin;C:4.7.4\tools\Perl64\bin;C:4.7.4\tools\jom;C:4.7.4\tools\fart;
set PATH=PATH;c:32;
set LANG=en
c:4.7.4\qt-everywhere-opensource-src-4.7.4\configure.exe -redo
  • If you are using MinGW-w64 (32bit) toolchain:
    • and, if you want to use Cmd-shell (cmd.exe windows shell), then cd into c:5_windows_32bit and type:
set PATH=C:-w64
\32bit\bin;C:-perl\64bit\perl\bin;C:_tools\jom;C:_tools\fart;
set PATH=PATH;C:32;
set LANG=en
C:4.7.4\qt-everywhere-opensource-src-4.7.4\configure.exe -redo
  • and, if you want to use MSYS2-shell, for 64bit (and 32bit) support based development, then follow this wiki page: MinGW-64-bit

After accepting the opensource license the configure command will then prepare qmake and the makefiles needed for the buildprocess.

Build Qt

Instead of mingw32-make we use jom. It is capable of distributing the work over a bunch of cpus being engaged by a Windows operating system. Type:

jom /W /S -j4

or other commandline parameters if they fit better for you. After that the build process of Qt starts and you want to have a coffee or two.

jom should finish with some warnings but without any error and you will have a pretty new build of the Qt Desktop library. Keep the shell open to make the next steps.

Installing the libraries.

Installing the newly built libs is not straightforward because there is no "make install" way for the MinGW host. To install the Qt libraries and the tools of it there is some work to be done before.

All the makefiles have "install" rules that install exactly to the folder that was used to build the whole library in. So installing into that folder doesn't make very much sense. All of the objectfiles still remain, and if you don't want to rebuild everything in the near future it is just a waste of diskspace. Installing for MinGW needs these install rules to be changed a bit.

For that purpose you copied the fart.exe tool to the tools folder. fart.exe can be used like sed to find and replace text in textfiles. In the already open cmd.exe shell where you built the libs in you want to type the following:

fart -c -i -r Makefile* $(INSTALL_ROOT)4.7.4\4.7.4-qt-x86-build $(INSTALL_ROOT)4.7.4\4.7.4-qt-x86
set INSTALL_ROOT=

Please note that after INSTALL_ROOT= must not be any character, not even a blank.

This command will change

$(INSTALL_ROOT)4.7.4\4.7.4-qt-x86-build

into

$(INSTALL_ROOT)4.7.4\4.7.4-qt-x86

in every makefile and will set the shell variable to an empty string. Someone also could remove the variable at all, but that's on your decision.

After this jom can make the installation into c:–4.7.4\4.7.4-qt-x86:

jom /W /S -j4 install

Since it is late now, someone probably wants to have a beer or two and wait for the installation to complete. After this there are some steps to do manually:

copy C:4.7.4\mingw32_x86\bin\mingwm10.dll C:4.7.4\4.7.4-qt-x86\bin
copy C:4.7.4\mingw32_x86\bin\libgcc_s_dw2-1.dll C:4.7.4\4.7.4-qt-x86\bin

Create a config file that tells qmake about its new installation path. Create a textfile C:–4.7.4\4.7.4-qt-x86\bin\qt.conf:

[Paths]
Prefix=C:/qt-4.7.4/4.7.4-qt-x86
Translations = translations

For now there is a dazzling new installation of your personal Qt build that can be found on your harddisk under C:–4.7.4\4.7.4-qt-x86. Go ahead and delete the build directory if you don't need it any more. If you want to be able to debug into the Qt sourcecode you might want to keep the sourcetree alive.

Build Qt with MinGW for a x64 (x86_64) target

This chapter describes on how to build the Qt opensource for a 64bit windows target.

Required toolchain

  • Information about the MinGW-w64 can be found on the wiki on MinGW and in this wiki page MinGW-64-bit. The recommended download site of MinGW-builds provides the different flavors of the compiler. Developers of MinGW-builds have moved onto its newer successor project, MSYS2, a complete opensource development solution/system, based on MinGW-w64 compilers/toolchains and MSYS. The MinGW-builds project is still supported.

Filesystem setup

Prepare your filesystem for your own build process. There is a batchfile that can build everything automatically. As soon as there will be a place to download you will be noted.

Prepare a tree that contains the tools and the source trees (replace the c:with whatever drive you need). It is recommended not to expand your computers path environment with the tools. Everything will take place in a single cmd.exe windows shell that has a path that fits your needs.

For filesystem setup open windows explorer and create the following folders:

  • set the root to c:–4.7.4 copy the mingw contents of the zip into c:–4.7.4\mingw64_x64
  • unzip the contents of the qt tar into c:–4.7.4\qt-everywhere-opensource-src-4.7.4
  • install or copy Perl into c:–4.7.4\tools\Perl
  • copy jom.exe into c:–4.7.4\tools\jom
  • copy fart.exe into c:–4.7.4\tools\fart
  • create a build directory for Qt under c:–4.7.4\4.7.4-qt-x64-build
  • step into this build directory and create a file "configure.cache" with the following content (you may want to change for your needs):
-platform win32-g++ -opensource
-debug -debug-and-release
-no-phonon
-fast
-nomake examples
-nomake demos
-no-dsp
-no-vcproj
-no-cetest
-no-s60
-qt-sql-odbc -qt-sql-sqlite -plugin-sql-odbc -plugin-sql-SQLite
-no-qt3support -no-opengl -no-openvg -no-incredibuild-xge

Do not be irritated when looking at the win32-g++ makespec. This makespec is also capable of building 64bit Qt. The PATH shell variable does currently only contain the path to MinGW64. So there will be no confusion about the compilers:

Configure your build tree

  • Open a cmd.exe windows shell (Cmd-shell), cd into c:–4.7.4\4.7.4-qt-x64-build and type:
set PATH=C:4.7.4\mingw64_x64\bin;C:4.7.4\tools\Perl64\bin;C:4.7.4\tools\jom;C:4.7.4\tools\fart;
set PATH=PATH;c:32;
set LANG=en
c:4.7.4\qt-everywhere-opensource-src-4.7.4\configure.exe -redo
  • If you are using MinGW-w64 (64bit) toolchain:
    • and, if you want to use Cmd-shell (cmd.exe windows shell), then cd into c:5_windows_64bit and type:
set PATH=C:-w64\64bit\bin;C:-perl\64bit\perl\bin;C:_tools\jom;C:_tools\fart;
set PATH=PATH;C:32;
set LANG=en
C:4.7.4\qt-everywhere-opensource-src-4.7.4\configure.exe -redo
  • and, if you want to use MSYS2-shell, for 64bit (and 32bit) support based development, then follow this wiki page: MinGW-64-bit

After accepting the opensource license the configure command will then prepare qmake and the makefiles needed for the buildprocess.

Build Qt

Instead of mingw32-make we use jom. It is capable of distributing the work over a bunch of cpus being engaged by a Windows operating system. Type:

jom /W /S -j4

or other commandline parameters if they fit better for you. After that the build process of Qt starts and you want to have a coffee or two.

jom should finish with some warnings but without any error and you will have a pretty new build of the Qt Desktop library. Keep the shell open to make the next steps.

Installing the libraries.

Installing the newly built libs is not straightforward because there is no "make install" way for the MinGW host. To install the Qt libraries and the tools of it there is some work to be done before.

All the makefiles have "install" rules that install exactly to the folder that was used to build the whole library in. So installing into that folder doesn't make very much sense. All of the objectfiles still remain, and if you don't want to rebuild everything in the near future it is just a waste of diskspace. Installing for MinGW needs these install rules to be changed a bit.

For that purpose you copied the fart.exe tool to the tools folder. fart.exe can be used like sed to find and replace text in textfiles. In the already open cmd.exe shell where you built the libs in you want to type the following:

fart -c -i -r Makefile* $(INSTALL_ROOT)4.7.4\4.7.4-qt-x64-build $(INSTALL_ROOT)4.7.4\4.7.4-qt-x64
set INSTALL_ROOT=

Please note that after INSTALL_ROOT= must not be any character, not even a blank.

This command will change

$(INSTALL_ROOT)4.7.4\4.7.4-qt-x64-build

into

$(INSTALL_ROOT)4.7.4\4.7.4-qt-x64

in every makefile and will set the shell variable to an empty string. Someone also could remove the variable at all, but that's on your decision.

After this jom can make the installation into c:–4.7.4\4.7.4-qt-x64:

jom /W /S -j4 install

Since it is late now, someone probably wants to have a beer or two and wait for the installation to complete. After this there are some steps to do manually:

copy C:4.7.4\mingw64_x64\bin\libgcc_s_sjlj-1.dll C:4.7.4\4.7.4-qt-x64\bin

The dual-target MinGW compiler adds an additional required dll to be copied. Following this guide step by step starting qmake will bring up an error message about missing libwinpthread-1.dll.

copy C:4.7.4\mingw64_x64\bin\libwinpthread-1.dll C:4.7.4\4.7.4-qt-x64\bin

Create a config file that tells qmake about its new installation path. Create a textfile C:–4.7.4\4.7.4-qt-x64\bin\qt.conf:

[Paths]
Prefix=C:/qt-4.7.4/4.7.4-qt-x64
Translations = translations

For now there is a dazzling new installation of your personal Qt build that can be found on your harddisk under C:–4.7.4\4.7.4-qt-x64. Go ahead and delete the build directory if you don't need it any more. If you want to be able to debug into the Qt sourcecode you might want to keep the sourcetree alive.

Building a cross Qt for x86 host and x64 target

Coming soon… You may visit this wiki page: MinGW-64-bit

Links and references