Qt Creator 14 - CMakeアップデート
7月 16, 2024 by Qt Group 日本オフィス | Comments
以下、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:GDB4:CDB8:PDB256:LLDB512:GDB DAP1024:LLDB DAP4096: µ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)

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.