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.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.