Qt Creator 4.15: New CMake Features
April 12, 2021 by Cristian Adam | Comments
Qt Creator 4.15 comes with a bunch of features and bug fixes for the CMake Project Manager.
Below, you have a list of what’s new and a few tips and tricks which would hopefully improve your CMake experience in Qt Creator.
Multi-config support
Multi-config generators like Xcode, Visual Studio and Ninja Multi-Config are now supported. This means that you only have to configure CMake once, have only one build directory, and are able to switch faster between build types.
Prior to Qt Creator 4.15, only the first CMake file-api json export was parsed. Now, Qt Creator needs to match the right configuration.
In the CMake project settings, there is a “Build type” field that needs to match the CMAKE_BUILD_TYPE
variable for the single configuration generators (Ninja, Makefile).
Qt Creator is using only the Xcode generator for iOS with Qt 6.
Re-configure with initial parameters
Configuring a CMake project in Qt Creator can be a bit confusing. Below, you have a diagram with the places where the CMake variable values are stored.
The initial CMake parameters values are used before the project gains a CMakeCache.txt
file. Afterwards all the changes in the project setting will result in cmake command line calls with -D<variable>:<type>=<value>
or -U<variable>
arguments, which will be stored in the CMakeCache.txt
and made available to Qt Creator via the file-api json files.
Qt Creator 4.15 gained a button called “Re-configure with initial parameters”, which does a “Clear CMake configuration” and then runs cmake with the values of the “Initial CMake parameters” list.
You will be able to add / edit CMake variables only if the initial cmake configuration succeeds.
Copy and Batch Edit CMake variables
After the project has been initially configured and Qt Creator could read the CMake file-api json files, one could add / modify CMake variables.
With the “Copy” and “Batch Edit…” features, you can configure a CMake project faster than before.
Note that the variables will be sent to cmake and will be persisted in the <BuildDir>/CMakeCache.txt
. If you want to keep the values around, save them into the “Initial CMake parameters” list.
Automatic backup of CMake configuration
Qt Creator 4.15 will make a copy of CMakeCache.txt
and .cmake/api/v1/reply
json directory before running CMake with -D<variable>:<type>=<value>
or -U<variable>
arguments.
If CMake fails for some reason, the backup will be restored so that you get the previous working configuration. Also the changes will still be present in the dialog and you will have the chance to adjust them.
Quick access to CMake targets definition
In the locator, one could open the corresponding CMakeLists.txt file for a target by typing Ctrl + K and then “cmo ”.
This was working fine if you had created targets directly via add_library
, add_executable
, but if you had a CMake API and created the targets using a function call, then you would get the CMake API cmake file definition and not the CMakeLists.txt file that called that function.
Qt Creator 4.15 has fixed this issue, see it in action with Qt Creator sources:
Package manager auto-setup
The “Initial Parameters list” gained a new entry:
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
This will cause CMake to inject the auto-setup.cmake
script before loading a CMake project. auto-setup.cmake
will call conan install
or vcpkg install
depending on project’s conan or vcpkg package manager configuration.
For more details about this feature and how to disable it if you don’t need it, see: Qt Creator: CMake package-manager auto-setup
Build import source directory relaxation
Qt Creator will allow the import of command line builds where the CMAKE_HOME_DIRECTORY
variable points to a path different than the path to the project’s CMakeLists.txt
.
This is the case of Qt6’s tests that have been configured by the qt-cmake-standalone-test
script, which does a bit of magic that allows the tests not to be CMake standalone projects.
Faster import project loading
Qt Creator needs CMake’s file-api json project export in order to load the project structure.
If a project doesn’t have this structure then Qt Creator will setup the file-api json query and run CMake to do the export.
Depending on the project size and platform this can take a while, wouldn’t it be better if the project would also get this json export?
This can be done by placing a PreLoad.cmake
next to the CMakeLists.txt
or in the build directory.
This PreLoad.cmake
:
foreach(file cache-v2 cmakeFiles-v1 codemodel-v2)
file(WRITE "${CMAKE_BINARY_DIR}/.cmake/api/v1/query/${file}" "")
endforeach()
will setup the files needed for CMake to generate the file-api json files.
Note that this can’t go into the above auto-setup.cmake
file, since Qt Creator creates these files itself. This case is just for the projects configured and built from command line and afterwards imported in Qt Creator.
Debugging the CMake Project Manager
Lastly, if your project doesn’t work with Qt Creator 4.15 anymore, you can find out what the CMake Project Manager is doing by enabling its logging mechanism:
QT_LOGGING_RULES=qtc.cmake*=true
This environment variable will trigger CMake Project Manager’s logging.
On Windows in order to see this log you either need to install DebugView or actually start Qt Creator from Qt Creator.
Qt Creator captures the OutputDebugString Windows debugging output of the programs that it launches.
You just need to have a C++ hello world program and add in the run dialog a custom executable with:
%{IDE:ResourcePath}\..\..\bin\qtcreator.exe
Blog Topics:
Comments
Subscribe to our newsletter
Subscribe Newsletter
Try Qt 6.8 Now!
Download the latest release here: www.qt.io/download.
Qt 6.8 release focuses on technology trends like spatial computing & XR, complex data visualization in 2D & 3D, and ARM-based development for desktop.
We're Hiring
Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.