Qt Creator 14 - CMake Update
July 15, 2024 by Cristian Adam | Comments
Here are the new CMake features and fixes in Qt Creator 14:
Per Project CMake Settings
Qt Creator 14 allows specifying the CMake settings per project.
This can be done in the GUI as seen below:

They can be specified in a CMakePresets.json file via the vendor field:
{ "version": 4, "configurePresets": [ { "name": "default", "displayName": "Default Config", "description": "Default build using Ninja generator", "generator": "Ninja", "binaryDir": "${sourceDir}/build/default" } ], "vendor": { "qt.io/QtCreator/1.0": { "AskBeforePresetsReload": false, "AskReConfigureInitialParams": false, "AutorunCMake": false, "PackageManagerAutoSetup": false, "ShowAdvancedOptionsByDefault": true, "ShowSourceSubFolders": false, "UseJunctionsForSourceAndBuildDirectories": true } } }
If a project doesn’t use CMakePresets.json, then a CMakeLists.txt.shared file can be used instead:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE QtCreatorProject> <qtcreator> <data> <variable>ProjectExplorer.Project.PluginSettings</variable> <valuemap type="QVariantMap"> <valuemap type="QVariantMap" key="CMakeSpecificSettings"> <value type="bool" key="AskBeforePresetsReload">false</value> <value type="bool" key="AskReConfigureInitialParams">false</value> <value type="bool" key="AutorunCMake">false</value> <value type="bool" key="PackageManagerAutoSetup">false</value> <value type="bool" key="ShowAdvancedOptionsByDefault">true</value> <value type="bool" key="ShowSourceSubFolders">false</value> <value type="bool" key="UseGlobalSettings">false</value> <value type="bool" key="UseJunctionsForSourceAndBuildDirectories">true</value> </valuemap> </valuemap> </data> <data> <variable>Version</variable> <value type="int">22</value> </data> </qtcreator>
Debugger registration for CMake Presets
The CMake Presets specification doesn’t mention anything about a Debugger entry.
Qt Creator 14 allows specifying a debugger in a configure preset via the vendor field:
"vendor": { "qt.io/QtCreator/1.0": { "debugger": "C:/Qt/Tools/mingw1120_64/bin/gdb.exe" } }
Or with all the debugger details as:
"vendor": { "qt.io/QtCreator/1.0": { "debugger": { "Id": "debugger.gdb.11.2.0.win64", "DisplayName": "GNU gdb 11.2.0 for MinGW 11.2.0 64-bit", "Abis": ["x86-windows-msys-pe-64bit"], "Binary": "C:/Qt/Tools/mingw1120_64/bin/gdb.exe", "EngineType": 1, "Version": "11.2.0" } } }
If the Id is not specified, then a GUID will be automatically generated.

The CMakePresets.json used above:
{ "version": 4, "configurePresets": [ { "name": "llvm-mingw", "displayName": "Qt LLVM MinGW 6.7.2 x64", "generator": "Ninja", "binaryDir": "${sourceDir}/build", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", "CMAKE_PREFIX_PATH": "C:/Qt/6.7.2/llvm-mingw_64", "CMAKE_C_COMPILER": "C:/Qt/Tools/llvm-mingw1706_64/bin/clang.exe", "CMAKE_CXX_COMPILER": "C:/Qt/Tools/llvm-mingw1706_64/bin/clang++.exe" }, "vendor": { "qt.io/QtCreator/1.0": { "debugger": { "DisplayName": "LLDB 17.0.6 Debugger", "Abis": [ "x86-windows-msys-pe-64bit" ], "Binary": "C:/Qt/Tools/llvm-mingw1706_64/bin/lldb.exe", "EngineType": 256, "Version": "17.0.6" } } } } ] }
In order to find the right values for the debugger, you can have a look at %appdata%\QtProject\qtcreator\debuggers.xml file. This is where Qt Creator stores the debuggers settings information.
The EngineType can have the following values:
1for GDB4for CDB8for PDB256for LLDB512for GDB DAP1024for LLDB DAP4096for µVision Debugger
Cross-compiler emulator
This feature was contributed by Ralf Habacker and was tracked by QTCREATORBUG-29880.
Below, I show how you can cross-compile for Windows x64 from a Linux host using the LLVM-MinGW 17.0.6 toolchain, which I extracted locally under $HOME/llvm-mingw.
The CMakePresets.json looks like this:
{ "version": 4, "configurePresets": [ { "name": "llvm-mingw", "displayName": "LLVM MinGW 17.0.6 x64", "generator": "Ninja", "binaryDir": "${sourceDir}/build", "toolchainFile": "llvm-mingw.cmake", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", "CMAKE_CROSSCOMPILING_EMULATOR": "/usr/bin/wine64" } } ] }
The llvm-mingw.cmake toolchain file is simplified version taken from wrappers: add CMake toolchain files from upstream LLVM-MinGW.
The CMakeLists.txt comes with a workaround for having the LLVM-MinGW C++ Runtime accessible to the C++ executable:
cmake_minimum_required(VERSION 3.16)
project(Hello LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(Hello main.cpp)
add_custom_command( TARGET Hello POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SYSROOT}/bin/libc++.dll" ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SYSROOT}/bin/libunwind.dll" ${CMAKE_BINARY_DIR} )
And lastly, a C++ example which has some Windows specific bits:
#include <iostream> #include <windows.h>
#if !defined(_M_X64) #error "not a x86_64 compiler" #endif
int main() { OSVERSIONINFO info{.dwOSVersionInfoSize = sizeof(OSVERSIONINFO)}; ::GetVersionEx(&info); std::cout << "Hello Windows " << info.dwMajorVersion << "." << info.dwMinorVersion << "." << info.dwBuildNumber << " " << info.szCSDVersion << "\n"; }

Note that I haven’t registered a debugger since the LLDB debugger from LLVM-MinGW would require some patching as seen in the following blog post Debugging Wine with LLDB and VSCode.
File operations on globbed CMake projects
Qt Creator 14 will no longer modify the CMakeLists.txt project file for CMake projects that use file(GLOB|_RECOURSE) to quickly create an executable or library by using *.cpp *.h globbing patterns.
cmake_minimum_required(VERSION 3.18)
project(HelloWidgetsGlob)
set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt6 REQUIRED COMPONENTS Widgets)
file(GLOB_RECURSE sources RELATIVE ${CMAKE_CURRENT_LIST_DIR} CONFIGURE_DEPENDS "*.c" "*.h" "*.cpp" "*.hpp" "*.cxx" "*.hxx")
file(RELATIVE_PATH buildDir ${CMAKE_CURRENT_LIST_DIR} ${CMAKE_BINARY_DIR}) list(FILTER sources EXCLUDE REGEX "${buildDir}/*")
add_executable(HelloWidgetsGlob ${sources}) target_link_libraries(HelloWidgetsGlob PRIVATE Qt6::Widgets)

Blog Topics:
Comments
Subscribe to our newsletter
Subscribe Newsletter
Try Qt 6.10 Now!
Download the latest release here: www.qt.io/download.
Qt 6.10 is now available, with new features and improvements for application developers and device creators.
We're Hiring
Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.