以下、Qt Creator 14の新しいCMakeの機能と修正点を紹介します。
プロジェクトごとのCMake設定
Qt Creator 14では、プロジェクトごとにCMakeの設定を指定することができます。
以下のようにGUIで行うことができます。

また、設定はCMakePresets.jsonファイルを使用して、vendorフィールドで指定できます。
{
"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
}
}
}
CMakePresets.jsonを使用しないプロジェクトの場合、代わりにCMakeLists.txt.sharedファイルを使用できます。
<?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>
CMake Presets用のデバッガー登録
CMake Presets の仕様にはデバッガー設定についての記述がありません。
Qt Creator 14では、vendorフィールドを使用して、CMake Presetsでデバッガーを指定することができます。
"vendor": {
"qt.io/QtCreator/1.0": {
"debugger": "C:/Qt/Tools/mingw1120_64/bin/gdb.exe"
}
}
また、書き通りデバッガーのすべての詳細を含めることができます。
"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"
}
}
}
Idが指定されていない場合、GUIDが自動的に生成されます。

上記画像で使用されているCMakePresets.jsonは以下の通りです。
{
"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"
}
}
}
}
]
}
デバッガーの正しい値を見つけるには、%appdata%\QtProject\qtcreator\debuggers.xmlファイルを参照してください。ここにQt Creatorがデバッガーの設定情報を保存しています。
EngineTypeには、以下の値を指定できます。
1:GDB
4:CDB
8:PDB
256:LLDB
512:GDB DAP
1024:LLDB DAP
4096: µVision デバッガー
クロスコンパイラーエミュレータ
この機能はRalf Habackerによって提供され、 QTCREATORBUG-29880で追跡されました。
以下では、ローカルで$HOME/llvm-mingwの下に配置した LLVM-MinGW 17.0.6 ツールチェーンを使用して、LinuxホストからWindows x64用にクロスコンパイルする方法を紹介します。
CMakePresets.jsonは以下のようになります。
{
"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"
}
}
]
}
llvm-mingw.cmake ツールチェーンファイルは、wrappers: add CMake toolchain files のLLVM-MinGW リポジトリから取得した簡略化されたバージョンです。
また、CMakeLists.txtには、LLVM-MinGW の C++ランタイムを C++ 実行ファイルで利用可能にするためのワークアラウンドが含まれています。
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}
)
そして、Windows固有の要素を持つC++の例をご紹介します。
#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";
}

LLVM-MinGWのLLDBデバッガは、Debugging Wine with LLDB and VSCode のブログ記事で説明されているように、いくつかのパッチが必要になるので、デバッガを登録していません。
グロブ化されたプロジェクトでファイル操作
Qt Creator 14 では、CMake プロジェクトで file(GLOB|_RECURSE) を使用して *.cpp *.h のグロビングパターンにより実行ファイルやライブラリをすばやく作成する場合、CMakeLists.txt プロジェクトファイルが変更されなくなりました。
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)
