Building Qt Desktop for Windows with MSVC
Building Qt Desktop for Windows with MSVC
Required SDKs and tools
Here are the tools required to build a Qt Shared or a Qt Static library. First, please, download and install (it is a good idea to find latest versions of software, listed below):
- Qt source code (I think you know where to find it :))
- On machines not having a previous Qt version already installed you need to install also Perl (e.g. ActivePerl [activestate.com] ) prior to configure. Otherwise you may receive following error message at the end of configure:
> Perl not found in environment – cannot run syncqt. - Microsoft Platform SDK [microsoft.com] (most recent at time of last wiki edit is Microsoft Windows 7.1 SDK.). The SDK includes the Microsoft Visual C++ compilers and debugging tools. You can in addition install Visual Studio Express [microsoft.com] if you like the IDE (not required!).
- KB2485545 [connect.microsoft.com] or Service Pack 1 [microsoft.com] are required for MSVC 2010 when building a 64bit library on intel x86 based CPUs. They fix a bug in the MSVC2010 compiler, and without it you will experience crashes when running 64bit binaries.
- OpenSSL [openssl.org] libraries or source code (if you want to build it yourself)
For Shared (if you want Phonon support) also required
- Microsoft DirectX SDK [go.microsoft.com]
Ok, all done but… If you decided to build OpenSSL yourself (really, I recommend you) it is also required
- ActivePerl [activestate.com] (community edition is free)
- The Netwide Assembler [nasm.us]
Installation
At first I recommend you to install all packages into one directory (for example C:\Development\):
- C:\Development\MSVC (for Visual C++)
- C:\Development\Windows 7.1 SDK (for platform SDK)
- C:\Development\OpenSSL (for OpenSSL library or unpack source code anywhere for build)
- …
It is not required to install examples, demos, docs, libraries not for target architecture e.g. ;)
Environment setup
It looks good to have a script to set up the environment instead of setting it all using system PATH variable:
This file is *.bat (or *.cmd) script. Just modify and save it for your environment. I set it up from tool’s (MSVC, SDKs) prompts.
You can add it to start menu or make a label (change script address at label preferences to “cmd /k path/to/setqtenv.cmd”).
What we have
At my computer I have installed MSVC++ 2010 Express Edition to C:\Development\MSVC, Windows 7.1 SDK C:\Development\Windows 7.1 SDK, DirectX SDK C:\Development\DirectX SDK, Perl C:\Perl (impossible to change), NASM unpacked to C:\Development\NASM, Qt Desktop (4.7.1) source code (from qt-everywhere-opensource-src-4.7.1.tar.gz) unpacked to C:\Development\Qt and OpenSSL source code unpacked to C:\Development\openssl-1.0.0c
“Static” tips
Before you start to build a static Qt Desktop library, you must know that for now you will have a dependence with MSVC Redistributable. To escape this you must replace -MD(d) build flag with -MT(d) (I will not recommend you use it, because it can cause runtime errors, etc. For example with this configuration I cannot start QtDesigner app. The reason is unknown.)
It’s available as both Static and Shared builds.
Building OpenSSL
At first, open your new Qt prompt, cd to your OpennSSL source directory and setup (if not set) Perl bin directory path (and check it?):
Something like this:
If all is ok, we can continue…
Configuring and preparing OpenSSL (copy-paste it, here is underscore symbols):
If you have NASM:
And if not:
Here we set up compiler and destination directory.
Now open ms\ntdll.mak (for Static — ms\nt.mak) file and replace at LFLAGS /debug with /release.
For Static build flag -MT is applied by default (look at “Static” tips). For shared -MD is used (change *CFLAG*’s at ms\ntdll.mak from /MD to /MT if required for you).
Ok, building, testing and “installing”:
For Shared:
And for Static:
Ready. Now you can remove your OpenSSL source code (C:\Development\openssl-1.0.0c here, on screenshot) directory and Perl installation. They are no longer required.
Configuring Qt Desktop
There are 2 steps:
- Check/Change build flags
- Configure
Note: MSVC supports build with multiple processes. Really. You can add -MP[processMax] flag. Details here [msdn.microsoft.com].
For first step (are you really sure with “Static” tips?) we are going to %QTDIR%\mkspecs\win32-msvc2010 (I know that you know that real path is C:\Development\mkspecs\win32-msvc2010 and if you have different version of MSVC it will be different spec directory ;)). Here we are interested in the qmake.conf configuration file.
Edit QMAKE_CFLAGS_RELEASE, QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO & QMAKE_CFLAGS_DEBUG variables. For example:
Next — configuring. My configuration (shared) is:
As you see, I do not want to build Qt3 support module, some styles, using image libs from Qt source, some additional instructions sets are enabled and some another stuff.
Ok, let’s configure… Accepting license… Please, wait… (building qmake now) :)
All the project’s files are read and now we able to build libs, tools, examples, etc. Just nmake it to build all. Also we are able to make only libs (nmake sub-src), tools (nmake sub-tools, but after libs)…
Recommendations
Copy (or move) OpenSSL libraries (*.dll) from %QTDIR%\OpenSSL\bin directory to Qt bin directory and add %QTDIR%\Qt\bin to system %PATH% variable.
Reduce used HDD space
Attention! This operations removes debugging information! (if you set release-and-debug)
Just at %QTDIR% run nmake clean to delete all tmp objects, etc. Then rebuild translations (go to %QTDIR%\translations and run nmake). And remove libraries (*.dll) from %QTDIR%\Qt\lib.
File:3006780451 86a22b8ae9 z.jpg