| /**************************************************************************** |
| ** |
| ** Copyright (C) 2019 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the documentation of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:FDL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU Free Documentation License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Free |
| ** Documentation License version 1.3 as published by the Free Software |
| ** Foundation and appearing in the file included in the packaging of |
| ** this file. Please review the following information to ensure |
| ** the GNU Free Documentation License version 1.3 requirements |
| ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| /*! |
| \page windows.html |
| \title Qt for Windows |
| \brief Platform support for Windows. |
| \ingroup supportedplatform |
| |
| Qt's support for different Windows platforms is extensive and mature. |
| |
| Before you get started, |
| ensure that your development environment fulfills |
| the \l{Qt for Windows - Requirements}{requirements}. |
| |
| To download and install Qt for Windows, follow the instructions on the |
| \l{Getting Started with Qt} page. |
| |
| \target windows-supported-configurations |
| \section1 Supported Configurations |
| |
| The following configurations are supported. |
| |
| \include supported-platforms.qdocinc windows |
| |
| \section1 Deployment and Other Issues |
| |
| The pages below covers specific issues and recommendations for creating |
| Windows applications. |
| |
| \list |
| \li \l{Qt for Windows - Deployment} |
| \li \l{Qt for Windows - Specific Issues} |
| \endlist |
| |
| \section1 Where to Go from Here |
| |
| We invite you to explore the rest of Qt. We prepared overviews which help |
| you decide which APIs to use and our examples demonstrate how to use our |
| API. |
| |
| \list |
| \li \l{Qt Overviews} - list of topics about application development |
| \li \l{Qt Examples and Tutorials}{Examples and Tutorials} - code samples and tutorials |
| \li \l{Qt Reference Pages} - a listing of C++ and QML APIs |
| \li \l{ActiveX in Qt} |
| \endlist |
| |
| Qt's vibrant and active community site, \l{http://qt.io} houses |
| a wiki, a forum, and additional learning guides and presentations. |
| |
| \section2 Visual Studio Tools |
| |
| The \l {Qt VS Tools} allows programmers to create, build, debug |
| and run Qt applications from within non-Express versions of Microsoft Visual Studio |
| 2013 and later. The add-in contains project wizards, Qt project import/export |
| support, integrated Qt resource manager and automated build setup for |
| the Qt Meta-Object Compiler, User Interface Compiler, and Resource |
| Compiler. |
| |
| */ |
| |
| /*! |
| \page windows-requirements.html |
| \title Qt for Windows - Requirements |
| \brief Requirements of the Windows environment. |
| |
| This page describes the required libraries and environment for |
| \l{Qt for Windows}. |
| |
| \section1 Libraries |
| |
| The following third-party libraries may be used when running Qt 5 |
| applications on Windows. |
| |
| \list |
| \li \l{OpenSSL Toolkit}: Qt can make use of OpenSSL to support Secure Socket Layer |
| (SSL) communication. |
| |
| \li \l{ICU}: Qt 5 can make use of the ICU library for enhanced UNICODE and Globalization |
| support (see QTextCodec, QCollator::setNumericMode()). |
| |
| At compile time, the \e include and \e lib folders of the ICU installation must |
| be appended to the \c INCLUDE and \c LIB environment variables. At run-time, the ICU DLLs |
| need to be found by copying the DLLs to the |
| application folder or by adding the \e bin folder of the ICU |
| installation to the \c PATH environment variable. |
| |
| \li \l{ANGLE}: This library converts OpenGL ES 2.0 API calls to DirectX 11 or DirectX 9 |
| calls (depending on availability), removing the need to install graphics drivers on |
| the target machines. |
| \endlist |
| |
| \section2 SSL |
| |
| Support for Secure Sockets Layer (SSL) communication is provided by the \l {OpenSSL Toolkit}, |
| which must be obtained separately. Download the latest version of the toolkit that is |
| supported by Qt. |
| |
| Qt can be configured to use OpenSSL in three ways: |
| \list |
| \li Qt Network loads OpenSSL libraries (DDLs) when first needed, at runtime. If not found, |
| the application continues to run, but fails to handle SSL communication. |
| |
| All official Qt binary builds use this configuration. |
| |
| The OpenSSL libraries are looked up first in the directory of the executable, then in |
| the Windows System directory (usually \c{C:\Windows\system32}), and finally in all |
| directories listed in the \c PATH environment variable. |
| |
| \li Qt Network links against the OpenSSL libraries. If they cannot be found at load time, |
| the application fails to start. |
| |
| \li Qt Network compiles against a static version of the OpenSSL libs, and OpenSSL becomes |
| part of the Qt5Network library. |
| \endlist |
| |
| |
| If you compile Qt yourself, you can configure how Qt uses OpenSSL by setting either the |
| \c{-openssl} / \c{-openssl-runtime} or \c{-openssl-linked} configure flags. |
| |
| If OpenSSL is not found in the normal compiler include and library directories, you can set |
| either the \c OPENSSL_PREFIX, or \c OPENSSL_INCDIR and \c OPENSSL_LIBDIR configure arguments. |
| If \c OPENSSL_PREFIX is set, \c OPENSSL_INCDIR defaults to \c OPENSSL_PREFIX/include and |
| \c OPENSSL_LIBDIR to \c OPENSSL_PREFIX/lib. |
| |
| The actual libraries to link to can be tweaked by setting the \c OPENSSL_LIBS, |
| \c OPENSSL_LIBS_DEBUG, and \c OPENSSL_LIBS_RELEASE configure arguments. |
| |
| \list |
| \li To load OpenSSL at runtime, set the \c {-openssl-runtime} configure argument. Qt will |
| try to find \c{openssl/ssl.h} and \c{openssl/opensslv.h} in the default include path of |
| the compiler. You can specify an additional include directory by setting |
| \c OPENSSL_INCDIR. |
| |
| For example: |
| \badcode |
| configure -openssl-runtime OPENSSL_INCDIR="C:\Program Files\OpenSSL-Win64\include" |
| \endcode |
| |
| \li To link Qt Network against OpenSSL libraries, set the \c{-openssl-linked} |
| configure argument. Use the \c{OPENSSL_PREFIX} variable to let Qt correctly locate |
| and build against your OpenSSL installation: |
| |
| For example: |
| \badcode |
| configure -openssl-linked OPENSSL_PREFIX="C:\Program Files\OpenSSL-Win64" |
| \endcode |
| |
| \li To link Qt Network against a static version of the OpenSSL libs, set the |
| \c{-openssl-linked} argument, and set \c{OPENSSL_PREFIX}, or \c{OPENSSL_INCDIR} |
| and \c{OPENSSL_LIBDIR}. In addition, you probably need to set the \c{OPENSSL_LIBS}, |
| \c{OPENSSL_LIBS_DEBUG}, \c{OPENSSL_LIBS_RELEASE} configure arguments to let Qt correctly |
| link against your static build of the OpenSSL libraries. |
| |
| For example: |
| |
| \badcode |
| set OPENSSL_DIR=C:\Program Files\OpenSSL-Win64 |
| configure -openssl-linked OPENSSL_INCDIR="%OPENSSL_DIR%\include" OPENSSL_LIBDIR="%OPENSSL_DIR%\lib\VC\static" OPENSSL_LIBS="-lWs2_32 -lGdi32 -lAdvapi32 -lCrypt32 -lUser32" OPENSSL_LIBS_DEBUG="-llibssl64MDd -llibcrypto64MDd" OPENSSL_LIBS_RELEASE="-llibssl64MD -llibcrypto64MD" |
| \endcode |
| \endlist |
| |
| See \l {Secure Sockets Layer (SSL) Classes} for further instructions on Qt with SSL support. |
| |
| \section2 ICU |
| |
| From Qt 5.3 and onwards, configure does not link Qt Core against ICU libraries |
| anymore by default. This reduces the size of a self-contained |
| application package considerably. |
| |
| Letting Qt Core utilize the ICU libraries however has following advantages: |
| \list |
| \li Behavior matches other platforms more closely. |
| \li Extended set of text codecs (see \l QTextCodec). |
| \li QLocale::toUpper(), QLocale::toLower() always use case conversion rules |
| specific to the locale. |
| \li QCollator::setNumericMode() does work consistently on all Windows versions. |
| \endlist |
| |
| To explicitly enable the use of ICU in Qt Core, pass \c -icu to \c configure: |
| |
| \badcode |
| configure -icu |
| \endcode |
| |
| \section1 Graphics Drivers |
| |
| For \l{Qt Quick} 2 to work, a graphics driver that provides OpenGL 2.1 or |
| higher is required. The default driver from Windows is OpenGL 1.1. Qt |
| includes a version of the \l{ANGLE} project which is included from the |
| Windows Qt installers. ANGLE implements the |
| OpenGL ES 2.0 API on top of DirectX 11 or DirectX 9. |
| |
| ANGLE requires that the DirectX SDK is installed when building Qt. |
| If MSVC is used, the DirectX SDK will be provided by the Windows SDK. In |
| this case, you will need at least Windows SDK 10. |
| For MinGW builds, you have to install the DirectX SDK provided by Microsoft. |
| |
| ANGLE chooses the render backend depending on availability. DirectX 11 |
| is usually preferable. However, some graphics cards may not fully |
| support it. For these cases, the environment variable \c QT_ANGLE_PLATFORM |
| (introduced in Qt 5.4) can be used to control the render backend. Possible |
| values are \c d3d11, \c d3d9 and \c warp. |
| |
| To use a custom version of ANGLE, set the \c ANGLE_DIR environment variable |
| to point to the ANGLE source tree before building Qt. |
| |
| If you installed additional OpenGL drivers from your hardware vendor, then |
| you may want to consider using this version of OpenGL instead of ANGLE. To |
| use OpenGL, pass the command line options \c{-opengl desktop} to the |
| configure script. |
| |
| \badcode |
| configure -opengl desktop |
| \endcode |
| |
| To use an OpenGL ES 2.0 emulator instead of ANGLE, use the configure |
| options: \c{-opengl es2 -no-angle}. |
| |
| \badcode |
| configure -opengl es2 -no-angle |
| \endcode |
| |
| \section2 Dynamically Loading Graphics Drivers |
| |
| In addition to the build time configuration, Qt supports choosing |
| and loading the OpenGL implementation at runtime. To use this |
| mode, pass \c{-opengl dynamic} to the configure script. |
| |
| \badcode |
| configure -opengl dynamic |
| \endcode |
| |
| \note As of Qt 5.5 this is the configuration used by the official, pre-built |
| binary packages of Qt. It is strongly recommended to use it also in custom |
| builds, especially for Qt binaries that are deployed alongside applications. |
| |
| \note Combining \c{-opengl dynamic} with \c{-static} is also possible, but |
| be aware that ANGLE will not be statically linked into the applications in |
| this case, it will still be built as a shared library. |
| |
| This configuration is the most flexible because no dependencies or |
| assumptions are hardcoded about the OpenGL implementation during build |
| time. It allows robust application deployment. When a given environment |
| fails to provide a proper OpenGL 2.0 implementation, it will fall back |
| automatically to ANGLE. This fallback will be completely transparent to the |
| application, and will allow Qt Quick or other OpenGL code to function by |
| translating to Direct3D. Such a fallback could, for example, take place on a |
| Windows 7 PC with no additional graphics drivers installed. On other |
| machines, where there is sufficient OpenGL support, the normal desktop |
| OpenGL drivers will be used. Additionally, pure software-based OpenGL |
| implementations may be available as additional fallbacks in the future, |
| allowing running Qt Quick applications without a GPU. |
| |
| When configured with \c{-opengl dynamic}, neither Qt nor the applications |
| built using \c qmake will link to the opengl32 (standard desktop OpenGL) or |
| QtANGLE libraries. Instead, the appropriate library is chosen at |
| runtime. By default, Qt will determine whether the system's opengl32.dll |
| provides OpenGL 2 functions. If these are present, opengl32.dll is used, |
| otherwise the ANGLE libraries (libEGL.dll and libGLESv2.dll) will be used. |
| In case the ANGLE libraries are missing or initialization fails for some |
| reason, an additional fallback is attempted by trying to load |
| \c{opengl32sw.dll}. See below for details. |
| |
| The loading mechanism can be configured through the \c{QT_OPENGL} |
| environment variable and the following application attributes: |
| |
| \list |
| \li \c Qt::AA_UseDesktopOpenGL Equivalent to setting \c{QT_OPENGL} to \c{desktop}. |
| \li \c Qt::AA_UseOpenGLES Equivalent to setting \c{QT_OPENGL} to \c{angle}. |
| \li \c Qt::AA_UseSoftwareOpenGL Equivalent to setting \c{QT_OPENGL} to \c{software}. |
| \endlist |
| |
| When a certain configuration is requested explicitly, no checks are done at |
| application startup, that is, the system-provided opengl32.dll will not be |
| examined. |
| |
| The dynamic loading has a significant impact on applications that contain |
| native OpenGL calls: they may fail to link since \c qmake no longer |
| automatically adds opengl32.lib or libGLESv2.lib. Instead, applications are |
| expected to use the OpenGL functions via the QOpenGLFunctions class. Thus |
| the direct dependency on the OpenGL library is removed and all calls will be |
| routed during runtime to the implementation chosen by Qt. |
| |
| Applications that require a certain OpenGL implementation (for example, |
| desktop OpenGL due to relying on features provided by OpenGL 3.0 or higher) |
| should set the application attributes \c Qt::AA_UseOpenGLES or \c |
| Qt::AA_UseDesktopOpenGL before instantiating QGuiApplication or |
| QApplication. When these attributes are set, no other OpenGL implementations |
| are considered. Additionally, if they wish to, such applications are free to |
| make direct OpenGL function calls by adding opengl32.lib to their .pro |
| project files: \e{LIBS += opengl32.lib} (Visual Studio) or \e{LIBS += |
| -lopengl32} (MinGW). The result is, from the application's perspective, |
| equivalent to the \c{-opengl desktop} build configuration of Qt. |
| |
| \c Qt::AA_UseSoftwareOpenGL is special in the sense that it will try to load |
| an OpenGL implementation with a non-standard name. The default name is |
| \c{opengl32sw.dll}. This allows shipping a software-only OpenGL |
| implementation, for example a build of |
| \l{http://www.mesa3d.org/llvmpipe.html}{Mesa with llvmpipe}, under this |
| name. If necessary, the filename can be overridden by setting the |
| \c{QT_OPENGL_DLL} environment variable. |
| |
| It is possible to provide a JSON-format configuration file specifying which |
| OpenGL implementation to use depending on the graphics card and driver version. |
| The location is given by the environment variable \c{QT_OPENGL_BUGLIST}. Relative |
| paths are resolved using \c {QLibraryInfo::SettingsPath} or |
| \c {QStandardPaths::ConfigLocation}. The file utilizes the format of the |
| driver bug list used in \l{The Chromium Projects}. It consists of a list of |
| entries each of which specifies a set of conditions and a list of feature keywords. |
| Typically, device id and vendor id are used to match a specific graphics card. |
| They can be found in the output of the \c qtdiag or \c dxdiag tool. |
| |
| The following feature keywords are relevant for choosing the OpenGL implementation: |
| |
| \list |
| \li \c disable_desktopgl - Disables OpenGL. This ensures that Qt does not attempt |
| to use regular OpenGL (opengl32.dll), and that it starts with ANGLE right |
| away. This is useful to prevent bad OpenGL drivers from crashing the application. |
| |
| \li \c disable_angle - Disables ANGLE. Ensures that Qt does not attempt to use |
| ANGLE (and so Direct3D). |
| |
| \li \c disable_d3d11 - Disables the D3D11 rasterizer in ANGLE. Instead, the next |
| D3D rendering option is tried first. The default order is: D3D11, D3D9, WARP, |
| reference implementation. |
| |
| \li \c disable_d3d9 - Disables the D3D9 rasterizer in ANGLE |
| |
| \li \c disable_rotation - Forces the application to run in landscape orientation |
| always. It applies to OpengGL only and has no effect when using ANGLE or Software |
| OpenGL implementations. This is intended for drivers that have issues with rotation. |
| This feature keyword was introduced in Qt 5.6. |
| |
| \li \c disable_program_cache - Disable storing shader program binaries on |
| disk. This feature keyword was introduced in Qt 5.12. |
| \endlist |
| |
| A sample file looks like: |
| |
| \badcode |
| { |
| "entries": [ |
| { |
| "id": 1, |
| "description": "Disable D3D11 on older nVidia drivers", |
| "os": { |
| "type": "win" |
| }, |
| "vendor_id": "0x10de", |
| "device_id": ["0x0DE9"], |
| "driver_version": { |
| "op": "<=", |
| "value": "8.17.12.6973" |
| }, |
| "features": [ |
| "disable_d3d11" |
| ] |
| }, |
| ... |
| \endcode |
| |
| When \c{QT_OPENGL_BUGLIST} is not specified, a built-in list will be |
| used. This typically includes some older, less-capable graphics cards with |
| \c disable_desktopgl set, in order to prevent Qt from using their unstable |
| desktop OpenGL implementations and instead fall back to ANGLE right away. |
| |
| In practice the most common combinations are expected to be the following: |
| |
| \list |
| \li \c disable_desktopgl - In case the system provides OpenGL 2.0 or newer, but |
| the driver is known to be unstable and prone to crash. |
| |
| \li \c disable_desktopgl, disable_angle - When no accelerated path is |
| desired. This ensures that the only option Qt tries is the sofware rasterizer |
| (opengl32sw.dll). Can be useful in virtual machines and applications that are |
| deployed on a wide range of old systems. |
| |
| \li \c disable_d3d11, disable_d3d9 - When the accelerated D3D options are known to |
| be unstable and WARP is desired (when available). Can be useful in virtual machines. |
| \endlist |
| |
| The supported keys for matching a given card or driver are the following. Note that |
| some of these are specific to Qt. |
| |
| \list |
| \li \c os.type - Operating system: \c win, \c linux, \c macosx, \c android |
| \li \c os.version - Kernel version |
| \li \c os.release - Specifies a list of operating system releases on Windows: |
| \c xp, \c vista, \c 7, \c 8, \c 8.1, \c 10. |
| |
| \li \c vendor_id - Vendor from the adapter identifier |
| |
| \li \c device_id - List of PCI device IDs. |
| |
| \li \c driver_version - Driver version from the adapter identifier |
| |
| \li \c driver_description - Matches when the value is a substring of the driver |
| description from the adapter identifier |
| |
| \li \c gl_vendor - Matches when the value is a substring of the \c GL_VENDOR string |
| \endlist |
| |
| To disable all blacklisting, set the environment variable \c{QT_NO_OPENGL_BUGLIST} to |
| any value. This will skip reading any configuration files, and instead will assume that |
| nothing is disabled, regardless of the driver or OS. |
| |
| \note While not typically needed, \c{QT_NO_OPENGL_BUGLIST} can become relevant in |
| certain virtualized environments, with multiple, possibly virtual, graphics adapters |
| present. If the logs from categories like \l{qt.qpa.gl} indicate that the detection of |
| the driver and display adapter leads to incorrectly disabling OpenGL, it is then |
| recommended to set this environment variable in order to enable the application to run |
| normally. This environment variable was introduced in Qt 5.15. |
| |
| \section1 Building from Source |
| |
| These tools are not needed to run Qt 5 applications, but they are required |
| for building Qt 5 from source. |
| |
| \list |
| \li \l ActivePerl - Install a recent version of ActivePerl |
| (\l{http://www.activestate.com/activeperl}{download page}) and add |
| the installation location to your \c PATH. |
| \li Python - Install Python from the \l{http://www.python.org/download/}{here} |
| and add the installation location to your \c PATH. |
| \endlist |
| |
| \note Please make sure that the \c perl executable from ActivePerl is found |
| in the path before the perl executable provided by msysgit, since the |
| latter is outdated. |
| |
| |
| ANGLE depends on these extra tools from the \l{GnuWin32 Project}{GnuWin32} and |
| \l {http://sourceforge.net/projects/winflexbison/}{Win flex-bison} |
| projects, which are provided for your convenience in the \e gnuwin32/bin |
| folder: |
| \list |
| \li \l{http://gnuwin32.sourceforge.net/downlinks/gperf.php}{GPerf} |
| \li \l{http://sourceforge.net/projects/winflexbison/files/win_flex_bison-2.5.5.zip/download}{Bison, Flex} |
| \endlist |
| |
| The \e gnuwin32/bin folder should be added to the \c PATH variable. |
| |
| \note If you are building qtbase outside of qt5.git, you will need to |
| download \e win_bison and \e win_flex from the link above and rename |
| them to \e bison and \e flex. |
| |
| For instructions for building the Qt 5 source, read |
| the \l{Qt for Windows - Building from Source} page. |
| |
| \section1 Compilers |
| |
| \section2 Visual Studio |
| |
| Qt can be built with Visual Studio 2015 (Update 2), Visual Studio 2017, |
| Visual Studio 2019 and Build Tools for Visual Studio 2017 and 2019 (see |
| also \l {Supported Platforms}). |
| |
| \section2 Intel C++ Compiler (Windows, Altix) |
| |
| Qt has been tested successfully with: |
| |
| \list |
| \li Windows - Intel(R) C++ Compiler for 32-bit applications, |
| Version 9.1.040. |
| \li Altix - Intel(R) C++ Itanium(R) Compiler for Itanium(R)-based |
| applications Version 8.1 Build 20050406 Package ID: l_cc_pc_8.1.030 |
| \endlist |
| |
| \section2 GCC (MinGW-builds) |
| |
| The minimum version of MinGW-builds supported is GCC 5.1.0 |
| (\l{https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/5.1.0/threads-posix/sjlj/x86_64-5.1.0-release-posix-sjlj-rt_v4-rev0.7z/download}{64bit}, |
| \l{https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/5.1.0/threads-posix/sjlj/i686-5.1.0-release-posix-sjlj-rt_v4-rev0.7z/download}{32bit}), |
| available from its \l{https://sourceforge.net/projects/mingw-w64/files}{download page}. |
| |
| For more information about the MinGW builds, visit the |
| \e{Reference Configuration} section of the |
| \l{Supported Platforms#Reference Configurations}{supported platforms} |
| page. |
| |
| \section2 Clang(clang-cl) |
| |
| Qt has been tested successfully with Clang 3.8(llvm svn rev. 256453 and clang |
| svn rev. 256453). Visual Studio 2015 Update 1 was used to build clang. Mkspec is |
| using the clang-cl tool to build Qt. Clang 3.8 does not support precompiled |
| headers. |
| |
| \sa {QDoc Dependencies} |
| |
| \section2 Building Qt WebEngine |
| |
| \l{Qt WebEngine} has additional build requirements which are listed in the |
| \l{Qt WebEngine Platform Notes}. |
| |
| \section1 QDoc Dependencies |
| Since version 5.11, \l {QDoc Manual}{QDoc} uses Clang to parse C++ code. |
| If you wish to build QDoc manually, refer to \l {Installing Clang for QDoc} |
| for specific build requirements. |
| |
| */ |
| |
| /*! |
| \page windows-issues.html |
| \title Qt for Windows - Specific Issues |
| \brief A description of issues with Qt that are specific to Windows. |
| |
| This page contains information about \l{Qt for Windows}. |
| |
| \section1 Installation location |
| |
| Installing Qt into a directory with spaces, for example, |
| \e{C:\\Program Files}, may cause linker errors like the following: |
| \snippet snippets/code/doc_src_platform-notes.qdoc 2 |
| |
| Install Qt into a sub-directory without spaces to avoid this problem. |
| |
| \section1 Possible GL conflict |
| |
| There is a known issue when running Microsoft NetMeeting, Lotus SameTime, |
| and other applications that require screen grabbing while direct |
| rendering is enabled. Other GL-applications may not work as expected, |
| unless direct rendering is disabled. |
| |
| \section1 Visual Studio |
| |
| The Visual C++ Linker doesn't understand filenames with spaces (for example, |
| \e{C:\\Program files\\Qt\\}) so you will have to move it to another place, |
| or explicitly set the path yourself. |
| |
| \snippet snippets/code/doc_src_compiler-notes.qdoc 0 |
| |
| If you are experiencing strange problems with using special flags that |
| modify the alignment of structure and union members (such as \c{/Zp2}) |
| then you will need to recompile Qt with the flags set for the |
| application as well. |
| |
| \section1 Fullscreen OpenGL Based Windows |
| |
| When a window is using an OpenGL based surface and is appearing in full |
| screen mode, problems can occur with other top-level windows which are |
| part of the application. Due to limitations of the Windows DWM, |
| compositing is not handled correctly for OpenGL based windows when going |
| into full screen mode. As a result, other top-level windows are not placed |
| on top of the full screen window when they are made visible. For example, |
| menus may not appear correctly, or dialogs fail to show up. |
| |
| A window can use an OpenGL based surface either explicitly when |
| \l {QWindow::}{setSurfaceType()} is called, or when something that |
| requires OpenGL is used inside the window, causing the whole window to be |
| OpenGL based. For example, QOpenGLWidget or QQuickWidget can trigger this. |
| However, if the surface is contained in a QWindow which is hosted with |
| \l {QWidget::}{createWindowContainer()}, or the obsoleted QGLWidget is |
| used and it does cover the entire full screen window, then this problem |
| does not occur. |
| |
| To solve this problem, a QWindowsWindowFunction can be used to enable a |
| native Windows flag which will set \c WS_BORDER when showing in full |
| screen mode. This can be utilized as follows: |
| |
| \code |
| QWindowsWindowFunctions::setHasBorderInFullScreen(tlwWindow->windowHandle(), true); |
| \endcode |
| |
| This will give the full screen window a 1-pixel border, thus enabling the |
| other top level windows to appear on top. |
| */ |
| |
| /*! |
| \page windows-deployment.html |
| \title Qt for Windows - Deployment |
| |
| This documentation describes deployment process for \l{Qt for |
| Windows}{Windows}. We refer to the \l{Plug & Paint Example}{Plug & Paint} |
| example application through out the document to demonstrate the deployment |
| process. |
| |
| \section1 The Windows Deployment Tool |
| \target windeployqt |
| The Windows deployment tool \c windeployqt is designed to automate the |
| process of creating a deployable folder containing the \l{Qt}-related |
| dependencies (libraries, QML imports, plugins, and translations) required |
| to run the application from that folder. |
| It creates a sandbox for \l{Qt for UWP}{Universal Windows Platform (UWP)} |
| or an installation tree for Windows desktop applications, which can be |
| easily bundled into an installation package. |
| |
| The tool can be found in \c{QTDIR/bin/windeployqt}. It needs to be run |
| within the build environment in order to function correctly. When using |
| Qt Installer, the script \c{QTDIR/bin/qtenv2.bat} should be used to set it up. |
| |
| \c windeployqt takes an \c .exe file or a directory that contains an \c .exe |
| file as an argument, and scans the executable for dependencies. If a |
| directory is passed with the \c{--qmldir} argument, \c windeployqt uses the |
| \c qmlimportscanner tool to scan QML files inside the directory for QML import |
| dependencies. Identified dependencies are then copied to the executable's |
| directory. |
| |
| In case Qt was built with the configure switch \c{-relocatable} turned off, |
| \c windeployqt replaces the hardcoded local paths in Qt5Core.dll by |
| relative ones. |
| |
| For Windows desktop applications, the required runtime files for the compiler |
| are also copied to the deployable folder by default (unless the option |
| \c --no-compiler-runtime is specified). In the case of release builds using |
| Microsoft Visual C++, these consist of the Visual C++ Redistributable Packages, |
| which are intended for recursive installation by the application's installer on |
| the target machine. Otherwise, the shared libraries of the compiler runtime are used. |
| |
| The application may require additional 3rd-party libraries (for example, |
| database libraries), which are not taken into account by windeployqt. |
| |
| Additional arguments are described in the tools' help output: |
| |
| \badcode |
| Usage: windeployqt [options] [files] |
| Qt Deploy Tool 5.14.1 |
| |
| The simplest way to use windeployqt is to add the bin directory of your Qt |
| installation (e.g. <QT_DIR\bin>) to the PATH variable and then run: |
| windeployqt <path-to-app-binary> |
| If ICU, ANGLE, etc. are not in the bin directory, they need to be in the PATH |
| variable. If your application uses Qt Quick, run: |
| windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary> |
| |
| Options: |
| -?, -h, --help Displays help on commandline options. |
| --help-all Displays help including Qt specific options. |
| -v, --version Displays version information. |
| --dir <directory> Use directory instead of binary directory. |
| --libdir <path> Copy libraries to path. |
| --plugindir <path> Copy plugins to path. |
| --debug Assume debug binaries. |
| --release Assume release binaries. |
| --pdb Deploy .pdb files (MSVC). |
| --force Force updating files. |
| --dry-run Simulation mode. Behave normally, but do not |
| copy/update any files. |
| --no-patchqt Do not patch the Qt5Core library. |
| --no-plugins Skip plugin deployment. |
| --no-libraries Skip library deployment. |
| --qmldir <directory> Scan for QML-imports starting from directory. |
| --qmlimport <directory> Add the given path to the QML module search |
| locations. |
| --no-quick-import Skip deployment of Qt Quick imports. |
| --no-translations Skip deployment of translations. |
| --no-system-d3d-compiler Skip deployment of the system D3D compiler. |
| --compiler-runtime Deploy compiler runtime (Desktop only). |
| --no-virtualkeyboard Disable deployment of the Virtual Keyboard. |
| --no-compiler-runtime Do not deploy compiler runtime (Desktop only). |
| --webkit2 Deployment of WebKit2 (web process). |
| --no-webkit2 Skip deployment of WebKit2. |
| --json Print to stdout in JSON format. |
| --angle Force deployment of ANGLE. |
| --no-angle Disable deployment of ANGLE. |
| --no-opengl-sw Do not deploy the software rasterizer library. |
| --list <option> Print only the names of the files copied. |
| Available options: |
| source: absolute path of the source files |
| target: absolute path of the target files |
| relative: paths of the target files, relative |
| to the target directory |
| mapping: outputs the source and the relative |
| target, suitable for use within an |
| Appx mapping file |
| --verbose <level> Verbose level (0-2). |
| |
| Qt libraries can be added by passing their name (-xml) or removed by passing |
| the name prepended by --no- (--no-xml). Available libraries: |
| bluetooth concurrent core declarative designer designercomponents enginio |
| gamepad gui qthelp multimedia multimediawidgets multimediaquick network nfc |
| opengl positioning printsupport qml qmltooling quick quickparticles quickwidgets |
| script scripttools sensors serialport sql svg test webkit webkitwidgets |
| websockets widgets winextras xml xmlpatterns webenginecore webengine |
| webenginewidgets 3dcore 3drenderer 3dquick 3dquickrenderer 3dinput 3danimation |
| 3dextras geoservices webchannel texttospeech serialbus webview |
| |
| Arguments: |
| [files] Binaries or directory containing the binary. |
| \endcode |
| |
| \section1 Static Linking |
| |
| To build static applications, build Qt statically by configuring Qt with |
| \c -static: |
| |
| \snippet snippets/code/doc_src_deployment.qdoc 11 |
| |
| If you later need to reconfigure and rebuild Qt from the |
| same location, ensure that all traces of the previous configuration are |
| removed by entering the build directory and running \c{nmake distclean} or |
| \c{mingw32-make distclean} before running \c configure again. |
| |
| \section2 Linking the Application to the Static Version of Qt |
| |
| As an example, this section will build the \l{tools/plugandpaint/app}{Plug & Paint} |
| example statically. |
| |
| Once Qt finishes building, build the \l{tools/plugandpaint/app}{Plug & Paint} |
| application. First we must go into the directory that contains the |
| application: |
| |
| \snippet snippets/code/doc_src_deployment.qdoc 13 |
| |
| Run \c qmake to create a new makefile for the |
| application, and perform a clean build to create the statically linked |
| executable: |
| |
| \snippet snippets/code/doc_src_deployment.qdoc 14 |
| |
| You probably want to link against the release libraries, and you can specify |
| this when invoking \c qmake. Now, provided that everything compiled and |
| linked without any errors, we should have a \c plugandpaint.exe file that is |
| ready for deployment. To check that the application has the required |
| libraries, copy the executable to a machine that does not have Qt or any Qt |
| applications installed, and run it on that machine. |
| |
| Remember that if your application depends on compiler specific |
| libraries, these must still be redistributed along with your |
| application. You can check which libraries your application is |
| linking against by using the \c depends tool. For more |
| information, read the \l {Application Dependencies} section. |
| |
| Since we cannot deploy plugins using the static linking |
| approach, the application we have prepared is incomplete. It will |
| run, but the functionality will be disabled due to the missing |
| plugins. To deploy plugin-based applications we should use the |
| shared library approach. |
| |
| \section1 Shared Libraries |
| |
| We have two challenges when deploying the \l |
| {tools/plugandpaint/app}{Plug & Paint} application using the shared |
| libraries approach: The Qt runtime has to be correctly |
| redistributed along with the application executable, and the |
| plugins have to be installed in the correct location on the target |
| system so that the application can find them. |
| |
| \section2 Building Qt as a Shared Library |
| |
| For this example, we assume that Qt is installed as a shared library, |
| which is the default when installing Qt, in the \e{C:\\path\\to\\Qt} |
| directory. |
| |
| \section2 Linking the Application to Qt as a Shared Library |
| |
| After ensuring that Qt is built as a shared library, we can build |
| the \l {tools/plugandpaint/app}{Plug & Paint} application. First, we |
| must go into the directory that contains the application: |
| |
| \snippet snippets/code/doc_src_deployment.qdoc 15 |
| |
| Now run \c qmake to create a new makefile for the application, and |
| do a clean build to create the dynamically linked executable: |
| |
| \snippet snippets/code/doc_src_deployment.qdoc 16 |
| |
| This builds the core application, the following will build the |
| plugins: |
| |
| \snippet snippets/code/doc_src_deployment.qdoc 17 |
| |
| If everything compiled and linked without any errors, we will get |
| a \c plugandpaint.exe executable and the \c pnp_basictools.dll and |
| \c pnp_extrafilters.dll plugin files. |
| |
| \section2 Creating the Application Package |
| |
| To deploy the application, we must make sure that we copy the |
| relevant Qt DLLs (corresponding to the Qt modules used in |
| the application) and the Windows platform plugin, \c {qwindows.dll}, |
| as well as the executable to the same directory tree in the \c release |
| subdirectory. |
| |
| In contrast to user plugins, Qt plugins must be put into subdirectories |
| matching the plugin type. The correct location for the platform plugin |
| is a subdirectory named \c {platforms}. \l{Qt Plugins} section has |
| additional information about plugins and how Qt searches for them. |
| |
| If dynamic OpenGL is used, you additionally need to include the |
| libraries required for \l{ANGLE} and software rendering. For \l{ANGLE}, |
| both \c libEGL.dll and \c libGLESv2.dll from Qt's \c lib directory are |
| required as well as the HLSL compiler from DirectX. The HLSL compiler |
| library, d3dcompiler_XX.dll, where XX is the version number that ANGLE |
| (libGLESv2) was linked against. |
| |
| If Qt was configured to link against ICU or OpenSSL, the respective DLL's |
| need to be added to the \c release folder, too. |
| |
| \note \l{Qt WebEngine} applications have additional requirements that are |
| listed in \l{Deploying Qt WebEngine Applications}. |
| |
| Remember that if your application depends on compiler specific |
| libraries, these must be redistributed along with your |
| application. You can check which libraries your application is |
| linking against by using the \c depends tool. For more |
| information, see the \l {Application Dependencies} section. |
| |
| We'll cover the plugins shortly, but first we'll check that the |
| application will work in a deployed environment: Either copy the |
| executable and the Qt DLLs to a machine that doesn't have Qt |
| or any Qt applications installed, or if you want to test on the |
| build machine, ensure that the machine doesn't have Qt in its |
| environment. |
| |
| If the application starts without any problems, then we have |
| successfully made a dynamically linked version of the \l |
| {tools/plugandpaint/app}{Plug & Paint} application. But the |
| application's functionality will still be missing since we have |
| not yet deployed the associated plugins. |
| |
| Plugins work differently to normal DLLs, so we can't just |
| copy them into the same directory as our application's executable |
| as we did with the Qt DLLs. When looking for plugins, the |
| application searches in a \c plugins subdirectory inside the |
| directory of the application executable. |
| |
| So to make the plugins available to our application, we have to |
| create the \c plugins subdirectory and copy over the relevant DLLs: |
| |
| \snippet snippets/code/doc_src_deployment.qdoc 18 |
| |
| An archive distributing all the Qt DLLs and application |
| specific plugins required to run the \l {tools/plugandpaint/app}{Plug |
| & Paint} application, would have to include the following files: |
| |
| \table 100% |
| \header |
| \li Component \li {2, 1} File Name |
| \row |
| \li The executable |
| \li {2, 1} \c plugandpaint.exe |
| \row |
| \li The Basic Tools plugin |
| \li {2, 1} \c plugins\pnp_basictools.dll |
| \row |
| \li The ExtraFilters plugin |
| \li {2, 1} \c plugins\pnp_extrafilters.dll |
| \row |
| \li The Qt Windows platform plugin |
| \li {2, 1} \c platforms\qwindows.dll |
| \row |
| \li The Qt Windows Vista style plugin |
| \li {2, 1} \c styles\qwindowsvistastyle.dll |
| \row |
| \li The Qt Core module |
| \li {2, 1} \c Qt5Core.dll |
| \row |
| \li The Qt GUI module |
| \li {2, 1} \c Qt5Gui.dll |
| \row |
| \li The Qt Widgets module |
| \li {2, 1} \c Qt5Widgets.dll |
| \endtable |
| |
| Other plugins might be required depending on the features the application uses |
| (\c iconengines, \c imageformats). |
| |
| In addition, the archive must contain the following compiler |
| specific libraries (assuming Visual Studio 14.0 (2015) or 15.0 (2017) or 16.0 (2019)): |
| |
| \table 100% |
| \header |
| \li Component \li {2, 1} File Name |
| \row |
| \li The C run-time |
| \li {2, 1} \c vccorlib140.dll, \c vcruntime140.dll |
| \row |
| \li The C++ run-time |
| \li {2, 1} \c msvcp140.dll |
| \endtable |
| |
| If dynamic OpenGL was used, then the archive must additionally contain: |
| |
| \table 100% |
| \header |
| \li Component \li {2, 1} File Name |
| \row |
| \li ANGLE libraries |
| \li {2, 1} libEGL.dll, libGLESv2.dll |
| \row |
| \li HLSL compiler library for ANGLE |
| \li {2, 1} d3dcompiler_XX.dll |
| \row |
| \li OpenGL Software renderer library |
| \li opengl32sw.dll |
| \endtable |
| |
| Finally, if Qt was configured to use ICU, the archive must contain: |
| |
| \table 100% |
| \header |
| \li{3,1} File Name |
| \row |
| \li icudtXX.dll |
| \li icuinXX.dll |
| \li icuucXX.dll |
| \endtable |
| |
| To verify that the application now can be successfully deployed, |
| you can extract this archive on a machine without Qt and without |
| any compiler installed, and try to run it. |
| |
| An alternative to putting the plugins in the plugins subdirectory |
| is to add a custom search path when you start your application |
| using QCoreApplication::addLibraryPath() or |
| QCoreApplication::setLibraryPaths(). |
| |
| \snippet snippets/code/doc_src_deployment.cpp 19 |
| |
| One benefit of using plugins is that they can easily be made |
| available to a whole family of applications. |
| |
| It's often most convenient to add the path in the application's \c |
| main() function, right after the QApplication object is |
| created. Once the path is added, the application will search it |
| for plugins, in addition to looking in the \c plugins subdirectory |
| in the application's own directory. Any number of additional paths |
| can be added. |
| |
| \section2 Manifest files |
| |
| When deploying an application compiled with Visual Studio, there are some |
| additional steps to be taken. |
| |
| First, we need to copy the manifest file created when linking the |
| application. This manifest file contains information about the |
| application's dependencies on side-by-side assemblies, such as the runtime |
| libraries. |
| |
| The manifest file needs to be copied into the \b same folder as the |
| application executable. You do not need to copy the manifest files for |
| shared libraries (DLLs), since they are not used. |
| |
| If the shared library has dependencies that are different from the |
| application using it, the manifest file needs to be embedded into the DLL |
| binary. Since Qt 4.1.3, the following \c CONFIG options are available for |
| embedding manifests: |
| |
| \snippet snippets/code/doc_src_deployment.qdoc 20 |
| |
| Both options are enabled by default. To remove \c{embed_manifest_exe}, add |
| |
| \snippet snippets/code/doc_src_deployment.pro 21 |
| |
| to your .pro file. |
| |
| You can find more information about manifest files and side-by-side |
| assemblies at the |
| \l {http://msdn.microsoft.com/en-us/library/aa376307.aspx}{MSDN website}. |
| |
| The correct way to include the runtime libraries with your application |
| is to ensure that they are installed on the end-user's system. |
| |
| To install the runtime libraries on the end-user's system, you need to |
| include the appropriate Visual C++ Redistributable Package (VCRedist) |
| executable with your application and ensure that it is executed when the |
| user installs your application. |
| |
| They are named \c vcredist_x64.exe (64-bit) or |
| \c vcredist_x86.exe (32-bit) and can be found in the folder |
| \c{<Visual Studio install path>/VC/redist/<language-code>}. |
| |
| Alternatively, they can be downloaded from the web, for example |
| \l{https://www.microsoft.com/download/details.aspx?id=48145} |
| {vcredist_x64.exe for Visual Studio 2015}. |
| |
| \note The application you ship must be compiled with exactly the same |
| compiler version against the same C runtime version. This prevents |
| deploying errors caused by different versions of the C runtime libraries. |
| |
| \section1 Application Dependencies |
| |
| \section2 Additional Libraries |
| |
| Depending on configuration, compiler specific libraries must be |
| redistributed along with your application. |
| |
| For example, if Qt is built using \l{ANGLE}, its shared libraries |
| and the HLSL compiler from DirectX to be shipped as well. |
| |
| You can check which |
| libraries your application is linking against by using the |
| \l{Dependency Walker} tool. All you need to do is to run it like |
| this: |
| |
| \snippet snippets/code/doc_src_deployment.qdoc 24 |
| |
| This will provide a list of the libraries that your application |
| depends on and other information. |
| |
| \image deployment-windows-depends.png |
| |
| When looking at the release build of the Plug & Paint executable |
| (\c plugandpaint.exe) with the \c depends tool, the tool lists the |
| following immediate dependencies to non-system libraries: |
| |
| \table 100% |
| \header |
| \li Qt |
| \li VC++ 14.0 (2015) |
| \li MinGW |
| \row |
| \li \list |
| \li QT5CORE.DLL - The QtCore runtime |
| \li QT5GUI.DLL - The QtGui runtime |
| \li QT5WIDGETS.DLL - The QtWidgets runtime |
| \endlist |
| \li \list |
| \li VCCORLIB140.DLL, VCRUNTIME140D.DLL - The C runtime |
| \li MSVCP140.DLL - The C++ runtime |
| \endlist |
| \li \list |
| \li LIBWINPTHREAD-1.DLL |
| \li LIBGCC_S_DW2-1.DLL |
| \li LIBSTDC++-6.DLL |
| \endlist |
| \endtable |
| |
| When looking at the plugin DLLs the exact same dependencies |
| are listed. |
| |
| From Qt version 5.2 onwards, the officially supported version |
| for OpenSSL is 1.0.0 or later. Versions >= 0.9.7 and < 1.0.0 might |
| work, but are not guaranteed to. |
| |
| \section2 Qt Plugins |
| |
| All Qt GUI applications require a plugin that implements the \l {Qt |
| Platform Abstraction} (QPA) layer in Qt 5. For Windows, the name of the |
| platform plugin is \c {qwindows.dll}. This file must be located within a |
| specific subdirectory (by default, \c platforms) under your distribution |
| directory. Alternatively, it is possible to adjust the search path Qt |
| uses to find its plugins, as described below. |
| |
| Your application may also depend on one or more Qt plugins, such |
| as the print support plugin, the JPEG image format plugin or a SQL driver |
| plugin. Be sure to distribute any Qt plugins that you need with your |
| application. Similar to the platform plugin, each type of plugin must |
| be located within a specific subdirectory (such as \c printsupport, |
| \c imageformats or \c sqldrivers) within your distribution directory. |
| |
| As of Qt 5.14, the libraries are relocatable unless Qt was built with |
| the configure switch \c{-relocatable} turned off. The search paths for |
| Qt plugins are relative to the location of the QtCore library and no |
| further steps are required to ensure plugins are found after installing |
| the application on the target machine. |
| |
| \section2 Ensuring Plugins Are Found when Using Non-Relocatable Builds |
| |
| For non-relocatable builds, additional steps must be taken to ensure |
| plugins are found after the application has been installed on the target |
| machine. |
| |
| In this case, the search path for Qt plugins is hard-coded into the QtCore |
| library. By default, the plugins subdirectory of the Qt installation is |
| the first plugin search path. However, pre-determined paths like the |
| default one have certain disadvantages. For example, they may not |
| exist on the target machine. For that reason, you need to examine various |
| alternatives to make sure that the Qt plugins are found: |
| |
| \list |
| |
| \li \l{qt-conf.html}{Using \c qt.conf}. This approach is the recommended |
| if you have executables in different places sharing the same plugins. |
| |
| \li Using QApplication::addLibraryPath() or |
| QApplication::setLibraryPaths(). This approach is recommended if you only |
| have one executable that will use the plugin. |
| |
| \li Using a third party installation utility to change the |
| hard-coded paths in the QtCore library. |
| |
| \endlist |
| |
| If you add a custom path using QApplication::addLibraryPath it could |
| look like this: |
| |
| \snippet snippets/code/doc_src_deployment.qdoc 54 |
| |
| Then QCoreApplication::libraryPaths() would return something like this: |
| |
| \list |
| \li \c{C:/customPath/plugins} |
| \li \c{C:/Qt/%VERSION%/plugins} |
| \li \c{E:/myApplication/directory} |
| \endlist |
| |
| The executable will look for the plugins in these directories and |
| the same order as the QStringList returned by QCoreApplication::libraryPaths(). |
| The newly added path is prepended to the QCoreApplication::libraryPaths() which |
| means that it will be searched through first. However, if you use |
| QCoreApplication::setLibraryPaths(), you will be able to determine which paths |
| and in which order they will be searched. |
| |
| The \l{How to Create Qt Plugins} document outlines the issues you |
| need to pay attention to when building and deploying plugins for |
| Qt applications. |
| |
| */ |
| |
| /*! |
| \page windows-building.html |
| \title Qt for Windows - Building from Source |
| \brief Configuring and building Qt for Windows. |
| |
| This page describes the process of configuring and building |
| \l{Qt for Windows}. Before building, there are some requirements that are |
| given in more detail in the \l{Qt for Windows - Requirements} document. |
| |
| You can download the Qt 5 sources from the \l{Downloads} page. For |
| more information, visit the \l{Getting Started with Qt} page. |
| |
| |
| \section1 Step 1: Install the License File (Commercially Licensed Qt Only) |
| |
| If you use Qt with a commercial license, the Qt tools look for a local license file. |
| If you are using a binary installer or the commercial Qt Creator, your licenses |
| are automatically fetched and stored in your local user profile |
| (\c{%USERPROFILE%\AppData\Roaming\Qt\qtlicenses.ini} file). |
| |
| If you do not use any binary installer or Qt Creator, you can download |
| the respective license file from your \l {Qt Account} Web portal and save |
| it to your user profile as \c{%USERPROFILE%\.qt-license}. If you prefer a |
| different location or file name, you need to set the \c{QT_LICENSE_FILE} |
| environment variable to the respective file path. |
| |
| \section1 Step 2: Unpack the Archive |
| |
| Uncompress the files into the directory you want Qt installed; |
| e.g. \c{C:\Qt\%VERSION%}. |
| |
| \note The install path must not contain any spaces or Windows specific |
| file system characters. |
| |
| \section1 Step 3: Set the Environment Variables |
| |
| We recommend creating a desktop link that opens a command |
| prompt with the environment set up similar to the |
| \uicontrol{Command Prompt} menu entries provided by Visual Studio. |
| This is done by creating an application link passing a \c .cmd file setting |
| up the environment and the command line option \c /k (remain open) |
| to \c cmd.exe. |
| |
| Assuming the file is called \c{qt5vars.cmd} |
| and the Qt folder is called \c Qt-5 and located under \c C:\Qt: |
| |
| \badcode |
| REM Set up Microsoft Visual Studio 2017, where <arch> is amd64, x86, etc. |
| CALL "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvarsall.bat" <arch> |
| SET _ROOT=C:\Qt\Qt-5 |
| SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% |
| REM Uncomment the below line when using a git checkout of the source repository |
| REM SET PATH=%_ROOT%\qtrepotools\bin;%PATH% |
| SET _ROOT= |
| \endcode |
| |
| A desktop link can then be created by specifying the command |
| \c{%SystemRoot%\system32\cmd.exe /E:ON /V:ON /k C:\Qt\qt5vars.cmd} |
| as application and \c{C:\Qt\Qt-5} as working directory. |
| |
| \note Setups for MinGW are similar; they differ |
| only in that the \c bin folder of the installation should be added to the |
| path instead of calling the Visual Studio setup script. For MinGW, please make |
| sure that no \c sh.exe can be found in the path, as it affects \c {mingw32-make}. |
| |
| Settings required by the additional libraries (see \l{Qt for Windows - Requirements}) |
| should also go this file below the call to the Windows SDK setup script. |
| |
| \section1 Step 4: Build the Qt Library |
| |
| The default behavior of configure is to create an in-source build |
| of Qt 5. If you want to install Qt 5 to a separate location, |
| you need to specify the command line option \c{-prefix <location>}. |
| Alternatively, the command line option \c -developer-build creates |
| an in-source build for developer usage. |
| |
| To configure the Qt library for a debug build for your machine, type |
| the following command in the command prompt: |
| |
| \badcode |
| configure -debug -nomake examples -nomake tests -skip qtwebengine -opensource |
| \endcode |
| |
| The \l{Qt Configure Options}{Configure Options} page contains more |
| information about the configure options. |
| |
| To build Qt using \l{jom}, type: |
| |
| \badcode |
| jom |
| \endcode |
| |
| If you do not have \l{jom} installed, type: |
| |
| \badcode |
| nmake |
| \endcode |
| |
| For MinGW, type: |
| |
| \badcode |
| mingw32-make |
| \endcode |
| |
| If an installation prefix was given, type |
| \c{jom install}, \c{nmake install} or \c{mingw32-make install}. |
| |
| \note If you later need to reconfigure and rebuild Qt from the |
| same location, ensure that all traces of the previous configuration are |
| removed by entering the build directory and typing \c{nmake distclean} |
| before running \c configure again. |
| |
| \section1 Parallel Builds |
| |
| \l{jom} is a replacement for \c nmake which makes use of all CPU cores |
| and thus speeds up building. |
| |
| \section1 Step 5: Build the Qt Documentation |
| |
| For the Qt reference documentation to be available in \l {Qt Assistant}, |
| you must build it separately: |
| |
| \badcode |
| nmake docs |
| \endcode |
| |
| This will build the documentation in the build folder. If you have |
| installed Qt in a separate location, you will also need to install |
| the documentation: |
| |
| \badcode |
| nmake install_docs |
| \endcode |
| */ |