Building Qt is not in itself difficult. But building Qt on Windows, and with QtWebkit can become quite the challenge. So here is a little tutorial on how I did it.
First of all, you’ll need a lot of stuff correctly installed. Keep in mind that the paths to the following tools should appear in your PATH env var. Some installers will update it for you, for others you’ll need to add it personally.
So the first thing you’ll want to install is this great tool : Rapid Env Editor. Be careful though, the big Download button on the download page is NOT the one you want to click ! You don’t have to go to the download section, you have download links in the header on the upper right :) (I made the mistake, thus this warning)
Now the list of stuff you to install :
Now, time to get the sources / libraries :
- Qt (Get the source zip)
- ICU (Get the package corresponding to your compiler. Currently only Visual Studio 2010, you’ll need to build from sources to get a version corresponding to Visual Studio 2013)
Extract Qt and ICU somewhere on your disk. I recommend you to put that in a short path, such as C:\Qt and C:\ICU. See Troobleshooting section for the reason why :)
Once everything’s installed and the paths to the tools in your PATH env var, you’re ready to build.
Go into the Qt sources root folder, then create a file name build_Qt_x64.bat (for instance) and copy the following into it :
@echo off :: :: Remember the source path (where the Qt sources are, e.g. where this file is) :: set sourcepath=%cd% :: :: The following part should be updated to reflect your build environment :: :: this will setup Visual Studio so that we can use it in command line call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86_amd64 :: where we want to install Qt set installpath=C:\Qt_x64 :: set the path where icu's lib was installed set icupath=C:\icu set icusuffix=64 :: :: Setup the configuration :: set configuration= -opensource -confirm-license -debug-and-release set configuration= %configuration% -prefix "%installpath%" set configuration= %configuration% -c++11 -mp -opengl desktop set configuration= %configuration% -icu -I "%icupath%\include" -L "%icupath%\lib%icusuffix%" set configuration= %configuration% -no-compile-examples -nomake tests -nomake examples -no-accessibility set configuration= %configuration% -skip qtwebkit-examples :: :: Cleanup previous install :: if exist "%installpath%" ( echo Removing "%installpath%" ) if exist "%installpath%" ( rmdir /Q /S "%installpath%" ) if not exist "%installpath%" ( echo Creating "%installpath%" ) if not exist "%installpath%" ( mkdir "%installpath%" ) :: :: Update the path with a few access to dlls, tools, etc. :: set path=%installpath%\qtbase\lib;%path% set path=%icupath%\bin%icusuffix%;%path% set path=%sourcepath%\GnuWin32\bin;%path% :: :: Configure. :: pushd "%installpath%" "%sourcepath%\configure" %configuration% -platform win32-msvc2010 :: :: And build :: :: note : on Windows, the configure script exit, so the following needs to be done manually. It's here for reference. nmake nmake install nmake clean popd
Now you can build by opening a command line on the root folder, and by typing the following :
build_Qt_x64.bat nmake nmake install nmake clean
The first line is quite fast (a few minutes) and the second can take a whole night :) The 2 last are quite long too, but it’s reasonable (a few hours max)
Hopefully everything will work well, but here are a few problems that you might encounter. I’ll update this part if needed.
fatal error U1095
One of the compilation command line is too long. The solution (which worked for me) is to ove the Qt and ICU to short folders, such as (for instance) C:\Qt and C:\ICU
fatal error U1077
This has to do with ICU. You shouldn’t get this if you’re building with Visual Studio 2010. If you’re using Visual Studio 2012 or 2013, see this post about building ICU (thanks Mihai :p)
Release x64 crashes when all other versions work
This one I discovered very recently, and updated the build script. It’s due to a bug in the Visual Studio 2010 compiler for x64, when you use link time code generation (the -ltcg option) So the solution is to not use this option :)