2018-10-24 13:20:27 +00:00
|
|
|
# Status
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
Initial port is on-going. Some modules of QtBase are ported, incl. some of the platform modules.
|
|
|
|
Many libraries, tests and examples are still missing.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
2019-05-01 12:07:16 +00:00
|
|
|
Basic functionality is there (moc, uic, etc.), but documentation, translations, etc. are missing.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
2019-06-05 13:19:08 +00:00
|
|
|
NOTE: YOU NEED CMAKE 3.15 or later.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
|
|
|
# Intro
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
The CMake update offers an opportunity to revisit some topics that came up during the last few
|
|
|
|
years.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
* The Qt build system does not support building host tools during a cross-compilation run. You need
|
|
|
|
to build a Qt for your host machine first and then use the platform tools from that version. The
|
|
|
|
decision to do this was reached independent of cmake: This does save resources on build machines
|
|
|
|
as the host tools will only get built once.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
* 3rd-party dependencies are no longer built as part of Qt. zlib, libpng, etc. from src/3rdparty
|
|
|
|
need to be supplied from the outside to the build now. You may find apt-get/brew/etc. useful for
|
|
|
|
this. Otherwise you may consider using vcpkg as in the next section. The decision to remove 3rd
|
|
|
|
party dependencies from Qt repositories was reached independent of the decision to use cmake, we
|
|
|
|
just use the opportunity to implement this decision.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
* There is less need for bootstrapping. Only moc and rcc (plus the lesser known tracegen and
|
|
|
|
qfloat16-tables) are linking against the bootstrap Qt library. Everything else can link against
|
|
|
|
the full QtCore. This will include qmake, which is currently missing from a cmake build. This will
|
|
|
|
change: Qmake is supported as a build system for applications *using* Qt going forward and will
|
|
|
|
not go away anytime soon.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
* For the time being we try to keep qmake working so that we do not interfere too much with ongoing
|
|
|
|
development.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
|
|
|
|
2019-05-24 08:33:17 +00:00
|
|
|
# Building against VCPKG on Windows
|
2018-10-24 13:20:27 +00:00
|
|
|
|
|
|
|
You may use vcpkg to install dependencies needed to build QtBase.
|
|
|
|
|
|
|
|
* ```git clone -b qt https://github.com/tronical/vcpkg```
|
|
|
|
* Run ```bootstrap-vcpkg.bat``` or ```bootstrap-vcpkg.sh```
|
2019-09-10 12:13:21 +00:00
|
|
|
* Set the ``VCPKG_DEFAULT_TRIPLET`` environment variable to ``qt-x64-windows-static`` or
|
|
|
|
``qt-x86-windows-static``
|
2019-06-20 12:15:59 +00:00
|
|
|
* Set the ``VCPKG_ROOT`` environment variable to the path where you cloned vcpkg
|
|
|
|
* Build Qt dependencies: ``vcpkg install @qt-packages-windows.txt``
|
2019-09-10 12:13:21 +00:00
|
|
|
* When running cmake in qtbase, support for vcpkg will be picked up automatically when the
|
|
|
|
VCPKG_ROOT/VCPKG_DEFAULT_TRIPLET environment variable is set.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
2019-02-12 09:19:47 +00:00
|
|
|
# Building against homebrew on macOS
|
|
|
|
|
2019-05-24 08:33:17 +00:00
|
|
|
You may use brew to install dependencies needed to build QtBase.
|
2019-02-12 09:19:47 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
* Install homebrew:
|
|
|
|
```/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"```
|
2019-05-01 12:07:16 +00:00
|
|
|
* Build Qt dependencies: ``brew install pcre2 harfbuzz freetype``
|
|
|
|
* Install cmake: ``brew install cmake``
|
2019-02-12 09:19:47 +00:00
|
|
|
* When running cmake in qtbase, pass ``-DCMAKE_PREFIX_PATH=/usr/local``
|
|
|
|
|
2018-10-24 13:20:27 +00:00
|
|
|
# Building
|
|
|
|
|
|
|
|
The basic way of building with cmake is as follows:
|
|
|
|
|
|
|
|
```
|
|
|
|
cd {build directory}
|
2019-06-17 13:54:10 +00:00
|
|
|
cmake -DCMAKE_INSTALL_PREFIX=/path/where/to/install {path to source directory}
|
2018-10-24 13:20:27 +00:00
|
|
|
cmake --build .
|
2019-06-17 13:54:10 +00:00
|
|
|
cmake --install .
|
2018-10-24 13:20:27 +00:00
|
|
|
```
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
You need one build directory per Qt module. The build directory can be a sub-directory inside the
|
|
|
|
module ``qtbase/build`` or an independent directory ``qtbase_build``. The installation prefix is
|
|
|
|
chosen when running cmake by passing ``-DCMAKE_INSTALL_PREFIX``. To build more than one Qt module,
|
|
|
|
make sure to pass the same install prefix.
|
2019-06-17 13:54:10 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
``cmake --build`` and ``cmake --install`` are simple wrappers around the basic build tool that CMake
|
|
|
|
generated a build system for. It works with any supported build backend supported by cmake, but you
|
|
|
|
can also use the backend build tool directly, e.g. by running ``make``.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
CMake has a ninja backend that works quite well and is noticeably faster than make, so you may want
|
|
|
|
to use that:
|
2018-10-24 13:20:27 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
cd {build directory}
|
2019-06-17 13:54:10 +00:00
|
|
|
cmake -GNinja -DCMAKE_INSTALL_PREFIX=/path/where/to/install {path to source directory}
|
|
|
|
cmake --build .
|
|
|
|
cmake --install .
|
2018-10-24 13:20:27 +00:00
|
|
|
```
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
You can look into the generated ``build.ninja`` file if you're curious and you can also build
|
|
|
|
targets directory such as ``ninja lib/libQt6Core.so``.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
Make sure to remove CMakeCache.txt if you forgot to set the CMAKE_INSTALL_PREFIX on the first
|
|
|
|
configuration, otherwise a second re-configuration will not pick up the new install prefix.
|
2019-06-17 13:54:10 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
You can use ``cmake-gui {path to build directory}`` or ``ccmake {path to build directory}`` to
|
|
|
|
configure the values of individual cmake variables or Qt features. After changing a value, you need
|
|
|
|
to choose the *configure* step (usually several times:-/), followed by the *generate* step (to
|
|
|
|
generate makefiles/ninja files).
|
2019-06-17 13:54:10 +00:00
|
|
|
|
|
|
|
## Developer Build
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
When working on Qt itself, it can be tedious to wait for the install step. In that case you want to
|
|
|
|
use the developer build option, to get as many auto tests enabled and no longer be required to make
|
|
|
|
install:
|
2018-10-24 13:20:27 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
cd {build directory}
|
2019-06-17 13:54:10 +00:00
|
|
|
cmake -GNinja -DCMAKE_INSTALL_PREFIX=/path/to/qtbase_build -DFEATURE_developer_build=ON {path to source directory}
|
|
|
|
cmake --build .
|
|
|
|
# do NOT make install
|
2018-10-24 13:20:27 +00:00
|
|
|
```
|
|
|
|
|
2019-05-02 15:26:19 +00:00
|
|
|
## Specifying configure.json features on the command line
|
|
|
|
|
|
|
|
QMake defines most features in configure.json files, like -developer-build or -no-opengl.
|
|
|
|
|
2019-11-28 12:00:25 +00:00
|
|
|
In CMake land, we currently generate configure.cmake files from the configure.json files into
|
|
|
|
the source directory next to them using the helper script
|
|
|
|
``path_to_qtbase_source/util/cmake/configurejson2cmake.py``. They are checked into the repository.
|
|
|
|
If the feature in configure.json has the name "dlopen", you can specify whether to enable or disable that
|
2019-09-10 12:13:21 +00:00
|
|
|
feature in CMake with a -D flag on the CMake command line. So for example -DFEATURE_dlopen=ON or
|
|
|
|
-DFEATURE_sql_mysql=OFF. At the moment, if you change a FEATURE flag's value, you have to remove the
|
|
|
|
CMakeCache.txt file and reconfigure with CMake. And even then you might stumble on some issues when
|
|
|
|
reusing an existing build, because of an automoc bug in upstream CMake.
|
2019-05-02 15:26:19 +00:00
|
|
|
|
2019-05-01 12:07:16 +00:00
|
|
|
## Ninja reconfiguration bug
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
If you use the Ninja generator, there's a bug that after the first CMake configuration, if you run
|
|
|
|
ninja, it will do the reconfiguration step again. This is quite annoying and time consuming.
|
2019-05-01 12:07:16 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
There is an open pull request that fixes the issue at
|
|
|
|
https://github.com/ninja-build/ninja/pull/1527. You can build your own Ninja executable until the
|
|
|
|
request is merged.
|
2019-05-01 12:07:16 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
cd {some directory}
|
|
|
|
git clone https://github.com/ninja-build/ninja.git
|
|
|
|
cd ninja && mkdir build && cd build
|
|
|
|
git remote add fix git@github.com:mathstuf/ninja.git && git fetch --all
|
|
|
|
git cherry-pick 29a565f18e01ce83ca14801f4684cd2acaf00d4c
|
|
|
|
../configure.py --bootstrap
|
|
|
|
cp ninja /usr/local/bin/ninja
|
|
|
|
```
|
|
|
|
|
2019-02-13 08:30:51 +00:00
|
|
|
## Building with CCache
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
You can pass ``-DQT_USE_CCACHE=ON`` to make the build system look for ``ccache`` in your ``PATH``
|
|
|
|
and prepend it to all C/C++/Objective-C compiler calls. At the moment this is only supported for the
|
|
|
|
Ninja and the Makefile generators.
|
2019-02-13 08:30:51 +00:00
|
|
|
|
|
|
|
## Cross Compiling
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
Compiling for a target architecture that's different than the host requires one build of Qt for the
|
|
|
|
host. This "host build" is needed because the process of building Qt involves the compilation of
|
|
|
|
intermediate code generator tools, that in turn are called to produce source code that needs to be
|
|
|
|
compiled into the final libraries. These tools are built using Qt itself and they need to run on the
|
|
|
|
machine you're building on, regardless of the architecure you are targeting.
|
2019-02-13 08:30:51 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
Build Qt regularly for your host system and install it into a directory of your choice using the
|
|
|
|
``CMAKE_INSTALL_PREFIX`` variable. You are free to disable the build of tests and examples by
|
2019-09-16 11:28:16 +00:00
|
|
|
passing ``-DBUILD_EXAMPLES=OFF`` and ``-DBUILD_TESTING=OFF``.
|
2019-02-13 08:30:51 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
With this installation of Qt in place, which contains all tools needed, we can proceed to create a
|
|
|
|
new build of Qt that is cross-compiled to the target architecture of choice. You may proceed by
|
|
|
|
setting up your environment. The CMake wiki has further information how to do that at
|
2019-02-13 08:30:51 +00:00
|
|
|
|
|
|
|
<https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/CrossCompiling>
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
Yocto based device SDKs come with an environment setup script that needs to be sourced in your shell
|
|
|
|
and takes care of setting up environment variables and a cmake alias with a toolchain file, so that
|
|
|
|
you can call cmake as you always do.
|
2019-02-13 08:30:51 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
In order to make sure that Qt picks up the code generator tools from the host build, you need to
|
|
|
|
pass an extra parameter to cmake:
|
2019-02-13 08:30:51 +00:00
|
|
|
|
|
|
|
```
|
Export tool config and target files for each relevant module
CMake will now generate config and target files for each module that
provides tools. As a result, namespaced global targets such as
Qt5::moc or Qt5::rcc can be made available.
Third party projects that require just these tools, and not the Qt
modules themselves, should specify CMAKE_PREFIX_PATH pointing to the
installed Qt location, and call find_package(Qt5CoreTools),
find_package(Qt5GuiTools), etc.
It is also possible to call
find_package(Qt5Tools REQUIRED Core Widgets) where the last option
is a list of modules whose tools should be imported.
Note that all the tools are in the Qt5::
namespace and not in the Qt5CoreTools:: or Qt5WidgetsTools::
namespace.
This commit also changes the behavior regarding when to build tools
while building Qt itself.
When cross compiling Qt (checked via CMAKE_CROSSCOMPILING) or when
-DQT_FORCE_FIND_TOOLS=TRUE is passed, tools added by add_qt_tool will
always be searched for and not built.
In this case the user has to specify the CMake variable QT_HOST_PATH
pointing to an installed host Qt location.
When not cross compiling, tools added by add_qt_tool are built from
source.
When building leaf modules (like qtsvg) that require some tool that was
built in qtbase (like moc), the module project should contain a
find_package(Qt5ToolsCore) call and specify an appropriate
CMAKE_PREFIX_PATH so that the tool package is found.
Note that because HOST_QT_TOOLS_DIRECTORY was replaced by QT_HOST_PATH,
the ensure syncqt code was changed to make it work properly with
both qtbase and qtsvg.
Here's a list of tools and their module associations:
qmake, moc, rcc, tracegen, qfloat16-tables, qlalr -> CoreTools
qvkgen -> GuiTools
uic -> WidgetTools
dbus related tools -> DBusTools
Task-number: QTBUG-74134
Change-Id: Ie67d1e2f8de46102b48eca008f0b50caf4fbe3ed
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-04-10 17:21:22 +00:00
|
|
|
-DQT_HOST_PATH=/path/to/your/host_build
|
2019-02-13 08:30:51 +00:00
|
|
|
```
|
|
|
|
|
Export tool config and target files for each relevant module
CMake will now generate config and target files for each module that
provides tools. As a result, namespaced global targets such as
Qt5::moc or Qt5::rcc can be made available.
Third party projects that require just these tools, and not the Qt
modules themselves, should specify CMAKE_PREFIX_PATH pointing to the
installed Qt location, and call find_package(Qt5CoreTools),
find_package(Qt5GuiTools), etc.
It is also possible to call
find_package(Qt5Tools REQUIRED Core Widgets) where the last option
is a list of modules whose tools should be imported.
Note that all the tools are in the Qt5::
namespace and not in the Qt5CoreTools:: or Qt5WidgetsTools::
namespace.
This commit also changes the behavior regarding when to build tools
while building Qt itself.
When cross compiling Qt (checked via CMAKE_CROSSCOMPILING) or when
-DQT_FORCE_FIND_TOOLS=TRUE is passed, tools added by add_qt_tool will
always be searched for and not built.
In this case the user has to specify the CMake variable QT_HOST_PATH
pointing to an installed host Qt location.
When not cross compiling, tools added by add_qt_tool are built from
source.
When building leaf modules (like qtsvg) that require some tool that was
built in qtbase (like moc), the module project should contain a
find_package(Qt5ToolsCore) call and specify an appropriate
CMAKE_PREFIX_PATH so that the tool package is found.
Note that because HOST_QT_TOOLS_DIRECTORY was replaced by QT_HOST_PATH,
the ensure syncqt code was changed to make it work properly with
both qtbase and qtsvg.
Here's a list of tools and their module associations:
qmake, moc, rcc, tracegen, qfloat16-tables, qlalr -> CoreTools
qvkgen -> GuiTools
uic -> WidgetTools
dbus related tools -> DBusTools
Task-number: QTBUG-74134
Change-Id: Ie67d1e2f8de46102b48eca008f0b50caf4fbe3ed
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-04-10 17:21:22 +00:00
|
|
|
The specified path needs to point to a directory that contains an installed host build of Qt.
|
2019-02-13 08:30:51 +00:00
|
|
|
|
2019-06-03 13:28:52 +00:00
|
|
|
### Cross Compiling for Android
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
In order to cross-compile Qt to Android, you need a host build (see instructions above) and an
|
|
|
|
Android build. In addition, it is necessary to install the Android NDK as well as vcpkg. Vcpkg is
|
|
|
|
needed to supply third-party libraries that Qt requires but that are not part of the Android NDK.
|
2019-06-03 13:28:52 +00:00
|
|
|
|
|
|
|
Vcpkg for Android can be set up using the following steps:
|
|
|
|
|
|
|
|
* ```git clone -b qt https://github.com/tronical/vcpkg```
|
|
|
|
* Run ```bootstrap-vcpkg.bat``` or ```bootstrap-vcpkg.sh```
|
2019-09-18 07:21:20 +00:00
|
|
|
* Set the ``VCPKG_DEFAULT_TRIPLET`` environment variable to one of the following values:
|
2019-06-27 08:51:42 +00:00
|
|
|
* ``arm-android`` (armeabi-v7a)
|
|
|
|
* ``arm64-android`` (arm64v8)
|
|
|
|
* ``x86-android`` (x86)
|
|
|
|
* ``x64-android`` (x86_64)
|
2019-06-20 12:15:59 +00:00
|
|
|
* Set the ``VCPKG_ROOT`` environment variable to the path where you cloned vcpkg
|
2019-06-03 13:28:52 +00:00
|
|
|
* Set the ``ANDROID_NDK_HOME`` environment variable to the path where you have installed the Android NDK.
|
2019-06-05 10:07:42 +00:00
|
|
|
* Set the ``ANDROID_SDK_HOME`` environment variable to the path where you have installed the Android SDK.
|
2019-06-20 12:15:59 +00:00
|
|
|
* Build Qt dependencies: ``vcpkg install @qt-packages-android.txt``
|
2019-06-03 13:28:52 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
When running cmake in qtbase, pass
|
|
|
|
``-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake -DQT_HOST_PATH=/path/to/your/host/build -DANDROID_SDK_ROOT=$ANDROID_SDK_HOME -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH``
|
2019-06-03 13:28:52 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
If you don't supply the configuration argument ``-DANDROID_ABI=...``, it will default to
|
2019-04-08 15:23:57 +00:00
|
|
|
``armeabi-v7a``. To target other architectures, use one of the following values:
|
2019-06-27 08:51:42 +00:00
|
|
|
* arm64: ``-DANDROID_ABI=arm64-v8``
|
|
|
|
* x86: ``-DANDROID_ABI=x86``
|
|
|
|
* x86_64: ``-DANDROID_ABI=x86_64``
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
By default we set the android API level to 21. Should you need to change this supply the following
|
|
|
|
configuration argument to the above CMake call: ``-DANDROID_NATIVE_API_LEVEL=${API_LEVEL}``
|
2019-06-27 13:27:14 +00:00
|
|
|
|
2019-04-08 15:23:57 +00:00
|
|
|
### Cross compiling for iOS
|
|
|
|
|
|
|
|
In order to cross-compile Qt to iOS, you need a host macOS build.
|
|
|
|
In addition, it is necessary to install a custom version of vcpkg. Vcpkg is
|
|
|
|
needed to supply third-party libraries that Qt requires, but that are not part of the iOS SDK.
|
|
|
|
|
|
|
|
Vcpkg for iOS can be set up using the following steps:
|
|
|
|
|
|
|
|
* ```git clone -b qt https://github.com/alcroito/vcpkg```
|
|
|
|
* Run ```bootstrap-vcpkg.sh```
|
|
|
|
* Set the ``VCPKG_DEFAULT_TRIPLET`` environment variable to one of the following values:
|
|
|
|
* ``x64-ios`` (simulator x86_64)
|
|
|
|
* ``x86-ios`` (simulator i386)
|
|
|
|
* ``arm64-ios`` (device arm64)
|
|
|
|
* ``arm-ios`` (device armv7)
|
|
|
|
* ``fat-ios`` (simulator_and_device x86_64 and arm64* - special considedrations)
|
|
|
|
* Set the ``VCPKG_ROOT`` environment variable to the path where you cloned vcpkg
|
|
|
|
* Build Qt dependencies: ``vcpkg install @qt-packages-ios.txt``
|
|
|
|
|
|
|
|
When running cmake in qtbase, pass
|
|
|
|
``-DCMAKE_SYSTEM_NAME=iOS -DQT_HOST_PATH=/path/to/your/host/build -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH``
|
|
|
|
|
|
|
|
If you don't supply the configuration argument ``-DQT_UIKIT_SDK=...``, it will default to
|
|
|
|
``iphonesimulator``. To target another SDK / device type, use one of the following values:
|
|
|
|
* iphonesimulator: ``-DQT_UIKIT_SDK=iphonesimulator``
|
|
|
|
* iphoneos: ``-DQT_UIKIT_SDK=iphoneos``
|
|
|
|
* simulator_and_device: ``-DQT_FORCE_SIMULATOR_AND_DEVICE=ON -DQT_UIKIT_SDK=``
|
|
|
|
|
|
|
|
Depending on what value you pass to ``-DQT_UIKIT_SDK=`` a list of target architectures is chosen
|
|
|
|
by default:
|
|
|
|
* iphonesimulator: ``x86_64``
|
|
|
|
* iphoneos: ``arm64``
|
|
|
|
* simulator_and_device: ``arm64;x86_64``
|
|
|
|
|
|
|
|
You can try choosing a different list of architectures by passing
|
|
|
|
``-DCMAKE_OSX_ARCHITECTURES=x86_64;i386``.
|
|
|
|
Note that if you choose different architectures compared to the default ones, the build might fail.
|
|
|
|
Only do it if you know what you are doing.
|
|
|
|
|
|
|
|
#### simulator_and_device special considerations
|
|
|
|
To do a simulator_and_device build, a custom version of CMake is required in addition to the vcpkg
|
|
|
|
fork. The merge request can be found here:
|
|
|
|
https://gitlab.kitware.com/cmake/cmake/merge_requests/3617
|
|
|
|
|
|
|
|
After you build your own copy of CMake using this merge request, you need to use it for both
|
|
|
|
vcpkg and Qt.
|
|
|
|
|
|
|
|
Note that vcpkg prefers its own version of CMake when building packages.
|
|
|
|
Make sure to put your custom built CMake in PATH, and force vcpkg to use this CMake by running
|
|
|
|
``export VCPKG_FORCE_SYSTEM_BINARIES=1`` in your shell.
|
|
|
|
|
2018-10-24 13:20:27 +00:00
|
|
|
# Debugging CMake files
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
CMake allows specifying the ``--trace`` and ``--trace-expand`` options, which work like
|
|
|
|
``qmake -d -d``: As the cmake code is evaluated, the values of parameters and variables is shown.
|
|
|
|
This can be a lot of output, so you may want to redirect it to a file.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
|
|
|
# Porting Help
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
We have some python scripts to help with the conversion from qmake to cmake. These scripts can be
|
|
|
|
found in ``utils/cmake``.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
|
|
|
## configurejson2cmake.py
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
This script converts all ``configure.json`` in the Qt repository to ``configure.cmake`` files for
|
|
|
|
use with CMake. We want to generate configure.cmake files for the foreseeable future, so if you need
|
|
|
|
to tweak the generated configure.cmake files, please tweak the generation script instead.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
``configurejson2cmake.py`` is run like this: ``util/cmake/configurejson2cmake.py .`` in the
|
|
|
|
top-level source directory of a Qt repository.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
|
|
|
|
|
|
|
## pro2cmake.py
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
``pro2cmake.py`` generates a skeleton CMakeLists.txt file from a .pro-file. You will need to polish
|
|
|
|
the resulting CMakeLists.txt file, but e.g. the list of files, etc. should be extracted for you.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
2019-11-28 12:00:25 +00:00
|
|
|
``pro2cmake.py`` is run like this: ``path_to_qtbase_source/util/cmake/pro2cmake.py some.pro``.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
|
|
|
|
|
|
|
## run_pro2cmake.py
|
|
|
|
|
2019-09-10 12:13:21 +00:00
|
|
|
`` A small helper script to run pro2cmake.py on all .pro-files in a directory. Very useful to e.g.
|
|
|
|
convert all the unit tests for a Qt module over to cmake;-)
|
2018-10-24 13:20:27 +00:00
|
|
|
|
2019-11-28 12:00:25 +00:00
|
|
|
``run_pro2cmake.py`` is run like this: ``path_to_qtbase_source/util/cmake/run_pro2cmake.py some_dir``.
|
2018-10-24 13:20:27 +00:00
|
|
|
|
|
|
|
|
|
|
|
## How to convert certain constructs
|
|
|
|
|
|
|
|
| qmake | CMake |
|
|
|
|
| ------ | ------ |
|
|
|
|
| ``qtHaveModule(foo)`` | ``if(TARGET Qt::foo)`` |
|
|
|
|
| ``qtConfig(foo)`` | ``if (QT_FEATURE_foo)`` |
|
|
|
|
|