Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.

Qt shadow builds: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
(Decode HTML entity names)
(Decode HTML entity numbers)
Line 23: Line 23:
'''''' Option-B : or, get & install Perl, Ruby, Python, git, 7pzip, etc inside [[MSYS2]]-shell with just one command and add just one directory location in PATH.
'''''' Option-B : or, get & install Perl, Ruby, Python, git, 7pzip, etc inside [[MSYS2]]-shell with just one command and add just one directory location in PATH.
'''''' Get & install other build related tools, SDKs, dependencies, etc which you need for your target platform(s). And add their directory location in PATH and also add other build related environment variables (like INCLUDE, LIB, LIBPATH, DEV, QTDIR, etc). See Qt build related other articles. For example, you may need support for "OpenSSL":, [https://wiki.qt.io/Compiling-ICU ICU] (Unicode), etc.
'''''' Get & install other build related tools, SDKs, dependencies, etc which you need for your target platform(s). And add their directory location in PATH and also add other build related environment variables (like INCLUDE, LIB, LIBPATH, DEV, QTDIR, etc). See Qt build related other articles. For example, you may need support for "OpenSSL":, [https://wiki.qt.io/Compiling-ICU ICU] (Unicode), etc.
'''* Bring %SystemRoot% location (its $SYSTEMROOT inside cygwin/bash/msys2) in beginning of PATH:
'''* Bring %SystemRoot% location (its $SYSTEMROOT inside cygwin/bash/msys2) in beginning of PATH:
''' If you are using Cmd-Shell, run this command:
''' If you are using Cmd-Shell, run this command:
<code>
<code>
set PATH=&#37;SystemRoot&#37;;&#37;SystemRoot&#37;32;&#37;PATH&#37;
set PATH=%SystemRoot%;%SystemRoot%32;%PATH%
</code>
</code>
'''''' If you are using [[MSYS2]]-Shell, run this command:
'''''' If you are using [[MSYS2]]-Shell, run this command:
<code>
<code>
windows2unix() { local pathPcs=() split pathTmp IFS=&#92;&#59;&#59; read -ra split &#60;&#60;&#60; &#34;$'''&#34;&#59; for pathTmp in &#34;${split&#91;@&#93;,}&#34;&#59; do pathPcs&#43;=( &#34;&#47;${pathTmp&#47;&#47;&#43;(&#91;:&#92;&#92;&#93;)&#47;&#47;}&#34; )&#59; done&#59; echo "${pathPcs&#91;'''&#93;}&#34;&#59; }&#59; systemrootP=$(windows2unix &#34;$SYSTEMROOT&#34;)&#59; export PATH="$systemrootP:$systemrootP/system32:$PATH"
windows2unix() { local pathPcs=() split pathTmp IFS=\;; read -ra split <<< "$'''"; for pathTmp in "${split[@],}"; do pathPcs+=( "/${pathTmp//+([:\\])//}" ); done; echo "${pathPcs[''']}"; }; systemrootP=$(windows2unix "$SYSTEMROOT"); export PATH="$systemrootP:$systemrootP/system32:$PATH"
</code>
</code>
'''* If you are using jom, fart, etc tools then:
'''* If you are using jom, fart, etc tools then:
''' If you are using Cmd-Shell, run this command:
''' If you are using Cmd-Shell, run this command:
<code>
<code>
set PATH=C:;C:;&#37;PATH&#37;
set PATH=C:;C:;%PATH%
</code>
</code>
'''''' If you are using [[MSYS2]]-Shell, run this command:
'''''' If you are using [[MSYS2]]-Shell, run this command:
Line 44: Line 44:
''' If you are using Cmd-shell, then adjust & run/execute below command:
''' If you are using Cmd-shell, then adjust & run/execute below command:
<code>
<code>
set PATH=C:-w64\64bit\bin;C:-perl\64bit\perl\bin;C:-perl\64bit\c\bin;C:-perl\64bit\c\x86_64-w64-mingw32\bin;C:27;C:64bit\bin;&#37;PATH&#37;
set PATH=C:-w64\64bit\bin;C:-perl\64bit\perl\bin;C:-perl\64bit\c\bin;C:-perl\64bit\c\x86_64-w64-mingw32\bin;C:27;C:64bit\bin;%PATH%
</code>
</code>
'''''' If you are using MSYS2-shell (or MSYS-shell), then adjust & run/execute below command:
'''''' If you are using MSYS2-shell (or MSYS-shell), then adjust & run/execute below command:
Line 51: Line 51:
</code>
</code>
* The original Qt source package must be left untouched- the "configure" must never have been run inside the source tree directory.
* The original Qt source package must be left untouched- the "configure" must never have been run inside the source tree directory.
'''''' For example, lets assume, we are handling with Qt version number &#37;VERSION&#37;, where &#37;VERSION&#37; variable contains version number 5. So we will place our source files in this directory: C:&#37;VERSION&#37;_src which means C:5_src (/c/Qt/Qt5_src).
'''''' For example, lets assume, we are handling with Qt version number %VERSION%, where %VERSION% variable contains version number 5. So we will place our source files in this directory: C:%VERSION%_src which means C:5_src (/c/Qt/Qt5_src).
'''* To set version number run/execute below command, for Cmd-shell:
'''* To set version number run/execute below command, for Cmd-shell:
<code>
<code>
Line 62: Line 62:
'''* If you are using windows Cmd-shell, then you need to run/execute similar commands
'''* If you are using windows Cmd-shell, then you need to run/execute similar commands
<code>
<code>
mkdir C:mkdir C:&#37;VERSION&#37;_src
mkdir C:mkdir C:%VERSION%_src
</code>
</code>
'''* If you are using [[MSYS2]]-shell or MSYS shell, then you need to run/execute similar commands
'''* If you are using [[MSYS2]]-shell or MSYS shell, then you need to run/execute similar commands
<code>
<code>
mkdir /c/Qt
mkdir /c/Qt
mkdir /c/Qt/Qt&#36;{VERSION}_src
mkdir /c/Qt/Qt${VERSION}_src
</code>
</code>
* With Qt5, the code has to be checked out of the git repository, otherwise the out of source build will fail as syncqt is not executed.
* With Qt5, the code has to be checked out of the git repository, otherwise the out of source build will fail as syncqt is not executed.
* Avoid using "release" and "debug" in the path to the shadow build directory. (This is an internal limitation of the build system.)
* Avoid using "release" and "debug" in the path to the shadow build directory. (This is an internal limitation of the build system.)
* So lets assume you have installed Qt in C:&#37;VERSION&#37;_src and you want to create a shadow build in C:-Qt5-shadow:
* So lets assume you have installed Qt in C:%VERSION%_src and you want to create a shadow build in C:-Qt5-shadow:
'''''' Make sure the environment variables for your build & target platform related compiler/toolchains, tools, dependencies, etc are set.
'''''' Make sure the environment variables for your build & target platform related compiler/toolchains, tools, dependencies, etc are set.
'''* For example, in Cmd-shell:
'''* For example, in Cmd-shell:
Line 86: Line 86:
<code>
<code>
cd C:-Qt5-shadow
cd C:-Qt5-shadow
C:&#37;VERSION&#37;_src\configure.exe -xplatform wincewm50pocket-msvc2005 -prefix &#37;INSTALLDIR&#37;
C:%VERSION%_src\configure.exe -xplatform wincewm50pocket-msvc2005 -prefix %INSTALLDIR%
</code>
</code>
  Adjust above command for your target platform, above is for building Qt5 for Windows CE platform.
  Adjust above command for your target platform, above is for building Qt5 for Windows CE platform.
Line 92: Line 92:
<code>
<code>
cd /c/Qt/mobile-Qt5-shadow
cd /c/Qt/mobile-Qt5-shadow
/c/Qt/Qt&#36;{VERSION}_src\configure.exe -xplatform wincewm50pocket-msvc2005 -prefix $INSTALLDIR
/c/Qt/Qt${VERSION}_src\configure.exe -xplatform wincewm50pocket-msvc2005 -prefix $INSTALLDIR
</code>
</code>
  Adjust above command for your target platform, above is for building Qt5 for Windows CE platform.
  Adjust above command for your target platform, above is for building Qt5 for Windows CE platform.

Revision as of 15:59, 13 March 2015

This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

How to set up shadow builds on OS X and Linux

Qt has a wonderful option: you can build Qt depending on your need from the same source code in many different flavors.

It come with a -prefix option in its configure script, which will allow you to install Qt in a directory of your choice. E.g. if you want to build a different version of Qt with or without webkit, you can do so by using the -no-webkit option in configure and by defining a different installation path using -prefix.

This way you build different versions of Qt on your development machine from the same source code.

Unfortunately, this option is not available on Windows.

How to set up shadow builds on Windows

While developing for Windows you might want to compile a version of Qt for several different platforms and SDKs. In order to create those different builds of Qt you do not have to copy the whole Qt package or the Qt source. You are able to create multiple Qt builds from a single source tree. Such builds are called shadow builds.

Basically a shadow build is created by calling configure.exe from a different directory.

To make sure that the shadow build compiles correctly it is important that you following these guidelines:

  • Required Build tools : Get & Install either MSYS or MSYS2 shell (do not use both, unless you know what you are doing).

' Toolchains/Compilers : Either get Visual Studio, or, MinGW, or, MinGW-w64 toolchains, (or get all of them, based on your need & target), separately from their official websites & install, or, get & Install MinGW-w64 (64bit & 32bit) toolchains inside MSYS2-shell. And add their directory location in the PATH environment variable. ' Option-A : Either get Perl, Ruby, Python, msysgit, 7zip separately from their official site and install into separate directories, and add each separate directories into the PATH. (ActivePerl , StrawberryPerl , etc are a popular distribution of Perl on Windows). ' Option-B : or, get & install Perl, Ruby, Python, git, 7pzip, etc inside MSYS2-shell with just one command and add just one directory location in PATH. ' Get & install other build related tools, SDKs, dependencies, etc which you need for your target platform(s). And add their directory location in PATH and also add other build related environment variables (like INCLUDE, LIB, LIBPATH, DEV, QTDIR, etc). See Qt build related other articles. For example, you may need support for "OpenSSL":, ICU (Unicode), etc. * Bring %SystemRoot% location (its $SYSTEMROOT inside cygwin/bash/msys2) in beginning of PATH: If you are using Cmd-Shell, run this command:

set PATH=%SystemRoot%;%SystemRoot%32;%PATH%

' If you are using MSYS2-Shell, run this command:

windows2unix() { local pathPcs=() split pathTmp IFS=\;; read -ra split <<< "$'''"; for pathTmp in "${split[@],}"; do pathPcs+=( "/${pathTmp//+([:\\])//}" ); done; echo "${pathPcs[''']}"; }; systemrootP=$(windows2unix "$SYSTEMROOT"); export PATH="$systemrootP:$systemrootP/system32:$PATH"

* If you are using jom, fart, etc tools then: If you are using Cmd-Shell, run this command:

set PATH=C:;C:;%PATH%

' If you are using MSYS2-Shell, run this command:

export PATH="/c/Qt/tools/jom:/c/Qt/tools/fart:$PATH"

* set the PATH If you are using Cmd-shell, then adjust & run/execute below command:

set PATH=C:-w64\64bit\bin;C:-perl\64bit\perl\bin;C:-perl\64bit\c\bin;C:-perl\64bit\c\x86_64-w64-mingw32\bin;C:27;C:64bit\bin;%PATH%

' If you are using MSYS2-shell (or MSYS-shell), then adjust & run/execute below command:

export PATH="/c/msys2/mingw64/bin:/c/msys2/usr/bin:$PATH"
  • The original Qt source package must be left untouched- the "configure" must never have been run inside the source tree directory.

' For example, lets assume, we are handling with Qt version number %VERSION%, where %VERSION% variable contains version number 5. So we will place our source files in this directory: C:%VERSION%_src which means C:5_src (/c/Qt/Qt5_src). * To set version number run/execute below command, for Cmd-shell:

set VERSION=5

* To set version number run/execute below command, for MSYS2-shell:

export VERSION=5

* If you are using windows Cmd-shell, then you need to run/execute similar commands

mkdir C:mkdir C:%VERSION%_src

* If you are using MSYS2-shell or MSYS shell, then you need to run/execute similar commands

mkdir /c/Qt
mkdir /c/Qt/Qt${VERSION}_src
  • With Qt5, the code has to be checked out of the git repository, otherwise the out of source build will fail as syncqt is not executed.
  • Avoid using "release" and "debug" in the path to the shadow build directory. (This is an internal limitation of the build system.)
  • So lets assume you have installed Qt in C:%VERSION%_src and you want to create a shadow build in C:-Qt5-shadow:

' Make sure the environment variables for your build & target platform related compiler/toolchains, tools, dependencies, etc are set. * For example, in Cmd-shell:

set LANG=en

* For example, in MSYS2-shell:

export LANG=en

* Visual Studio includes vcvars32.bat for that purpose - or simply use the "Visual Studio Command Prompt" from the Start menu.

  • Now navigate and GO INSIDE into your shadow build directory and run the "configure":

If you are using Cmd-shell:

cd C:-Qt5-shadow
C:%VERSION%_src\configure.exe -xplatform wincewm50pocket-msvc2005 -prefix %INSTALLDIR%
Adjust above command for your target platform, above is for building Qt5 for Windows CE platform.

' If you are using MSYS2-shell (or MSYS-shell) :

cd /c/Qt/mobile-Qt5-shadow
/c/Qt/Qt${VERSION}_src\configure.exe -xplatform wincewm50pocket-msvc2005 -prefix $INSTALLDIR
Adjust above command for your target platform, above is for building Qt5 for Windows CE platform.
  • Finally, to build the shadow build, you may use nmake or jom or mingw32-make. In below example, we are showing command for nmake only:
nmake
  • That's all. You have successfully created a shadow build of Qt inside C:-Qt5-shadow.
  • Now you can call "nmake install" and get a clean installation of Qt inside INSTALLDIR.