12,964
回編集
編集の要約なし |
|||
874行目: | 874行目: | ||
</center> | </center> | ||
<br><br> | <br><br> | ||
== CLion / Qtとの連携 == | |||
==== Qt 5向けCMakeツールチェーンファイルの作成 ==== | |||
Raspberry Pi向けのQt 5ライブラリのインストールディレクトリ内のlib/cmake/Qt5ディレクトリにCMakeツールチェーンファイルの作成する。<br> | |||
vi /<Qt 5ライブラリのインストールディレクトリ>lib/cmake/Qt5/qt.toolchain.cmake | |||
<br> | |||
<syntaxhighlight lang="cmake"> | |||
# /<Qt 5ライブラリのインストールディレクトリ>lib/cmake/Qt5/qt.toolchain.cmakeファイル | |||
set(__qt_toolchain_used_variables | |||
QT_CHAINLOAD_TOOLCHAIN_FILE | |||
QT_TOOLCHAIN_INCLUDE_FILE | |||
QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR | |||
QT_TOOLCHAIN_RELOCATABLE_PREFIX | |||
QT_ADDITIONAL_PACKAGES_PREFIX_PATH | |||
) | |||
list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES ${__qt_toolchain_used_variables}) | |||
list(REMOVE_DUPLICATES CMAKE_TRY_COMPILE_PLATFORM_VARIABLES) | |||
if($ENV{_QT_TOOLCHAIN_VARS_INITIALIZED}) | |||
foreach(var ${__qt_toolchain_used_variables}) | |||
set(${var} "$ENV{_QT_TOOLCHAIN_${var}}") | |||
endforeach() | |||
endif() | |||
set(__qt_initially_configured_toolchain_file "<Raspberry Pi向けCMakeツールチェーンファイルのパス>") | |||
set(__qt_chainload_toolchain_file "${__qt_initially_configured_toolchain_file}") | |||
if(NOT QT_QMAKE_TARGET_MKSPEC) | |||
set(QT_QMAKE_TARGET_MKSPEC <Qt 5のクロスコンパイルで使用したRaspberry Pi向けデバイス定義ファイルのパス> CACHE STRING "") | |||
endif() | |||
if(NOT "${QT_CHAINLOAD_TOOLCHAIN_FILE}" STREQUAL "") | |||
set(__qt_chainload_toolchain_file "${QT_CHAINLOAD_TOOLCHAIN_FILE}") | |||
endif() | |||
if(__qt_chainload_toolchain_file) | |||
get_filename_component(__qt_chainload_toolchain_file_real_path | |||
"${__qt_chainload_toolchain_file}" REALPATH) | |||
if(__qt_chainload_toolchain_file_real_path STREQUAL CMAKE_CURRENT_LIST_FILE) | |||
message(FATAL_ERROR | |||
"Woah, the Qt toolchain file tried to include itself recursively! '${__qt_chainload_toolchain_file}' " | |||
"Make sure to remove qtbase/CMakeCache.txt and reconfigure qtbase with 'cmake' " | |||
"rather than 'qt-cmake', and then you can reconfigure your own project." | |||
) | |||
elseif(NOT EXISTS "${__qt_chainload_toolchain_file_real_path}") | |||
message(WARNING "The toolchain file to be chainloaded " | |||
"'${__qt_chainload_toolchain_file}' does not exist.") | |||
else() | |||
include("${__qt_chainload_toolchain_file}") | |||
set(__qt_chainload_toolchain_file_included TRUE) | |||
endif() | |||
unset(__qt_chainload_toolchain_file) | |||
endif() | |||
get_filename_component(QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX ${CMAKE_CURRENT_LIST_DIR}/../../../ ABSOLUTE) | |||
get_filename_component(QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) | |||
list(PREPEND CMAKE_PREFIX_PATH "${QT_TOOLCHAIN_RELOCATABLE_CMAKE_DIR}") | |||
list(PREPEND CMAKE_FIND_ROOT_PATH "${QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX}") | |||
if(NOT QT_AVOID_CUSTOM_PLATFORM_MODULES) | |||
list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/platforms") | |||
endif() | |||
set(__qt_toolchain_additional_packages_prefixes "") | |||
if(QT_ADDITIONAL_PACKAGES_PREFIX_PATH) | |||
list(APPEND __qt_toolchain_additional_packages_prefixes ${QT_ADDITIONAL_PACKAGES_PREFIX_PATH}) | |||
endif() | |||
if(DEFINED ENV{QT_ADDITIONAL_PACKAGES_PREFIX_PATH} AND NOT "$ENV{QT_ADDITIONAL_PACKAGES_PREFIX_PATH}" STREQUAL "") | |||
set(__qt_env_additional_packages_prefixes $ENV{QT_ADDITIONAL_PACKAGES_PREFIX_PATH}) | |||
if(NOT CMAKE_HOST_WIN32) | |||
string(REPLACE ":" ";" __qt_env_additional_packages_prefixes | |||
"${__qt_env_additional_packages_prefixes}") | |||
endif() | |||
list(APPEND __qt_toolchain_additional_packages_prefixes ${__qt_env_additional_packages_prefixes}) | |||
unset(__qt_env_additional_packages_prefixes) | |||
endif() | |||
if(__qt_toolchain_additional_packages_prefixes) | |||
set(__qt_toolchain_additional_packages_root_paths "") | |||
set(__qt_toolchain_additional_packages_prefix_paths "") | |||
foreach(__qt_additional_path IN LISTS __qt_toolchain_additional_packages_prefixes) | |||
file(TO_CMAKE_PATH "${__qt_additional_path}" __qt_additional_path) | |||
get_filename_component(__qt_additional_path "${__qt_additional_path}" ABSOLUTE) | |||
set(__qt_additional_path_lib_cmake "${__qt_additional_path}") | |||
if(NOT __qt_additional_path_lib_cmake MATCHES "/lib/cmake$") | |||
string(APPEND __qt_additional_path_lib_cmake "/lib/cmake") | |||
endif() | |||
list(APPEND __qt_toolchain_additional_packages_root_paths "${__qt_additional_path}") | |||
list(APPEND __qt_toolchain_additional_packages_prefix_paths "${__qt_additional_path_lib_cmake}") | |||
endforeach() | |||
list(PREPEND CMAKE_PREFIX_PATH ${__qt_toolchain_additional_packages_prefix_paths}) | |||
list(PREPEND CMAKE_FIND_ROOT_PATH ${__qt_toolchain_additional_packages_root_paths}) | |||
unset(__qt_additional_path) | |||
unset(__qt_additional_path_lib_cmake) | |||
unset(__qt_toolchain_additional_packages_root_paths) | |||
unset(__qt_toolchain_additional_packages_prefix_paths) | |||
endif() | |||
unset(__qt_toolchain_additional_packages_prefixes) | |||
set(__qt_toolchain_extra_file "${CMAKE_CURRENT_LIST_DIR}/qt.toolchain.extra.cmake") | |||
if(EXISTS "${__qt_toolchain_extra_file}") | |||
include("${__qt_toolchain_extra_file}") | |||
endif() | |||
if(QT_TOOLCHAIN_INCLUDE_FILE) | |||
get_filename_component(__qt_toolchain_include_file_real_path "${QT_TOOLCHAIN_INCLUDE_FILE}" REALPATH) | |||
if(EXISTS "${__qt_toolchain_include_file_real_path}") | |||
include("${__qt_toolchain_include_file_real_path}") | |||
else() | |||
message(WARNING "The passed extra toolchain file to be included does not exist: " "${__qt_toolchain_include_file_real_path}") | |||
endif() | |||
endif() | |||
if(DEFINED CACHE{CMAKE_BUILD_TYPE}) | |||
set(__qt_toolchain_cmake_build_type_before_project_call "${CMAKE_BUILD_TYPE}") | |||
endif() | |||
if(NOT "$ENV{_QT_TOOLCHAIN_VARS_INITIALIZED}") | |||
set(ENV{_QT_TOOLCHAIN_VARS_INITIALIZED} ON) | |||
foreach(var ${__qt_toolchain_used_variables}) | |||
set(ENV{_QT_TOOLCHAIN_${var}} "${${var}}") | |||
endforeach() | |||
endif() | |||
</syntaxhighlight> | |||
<br> | |||
==== ツールチェーンの設定 ==== | |||
CLionを起動する。<br> | |||
[ファイル]メニューバー - [設定]を選択する。<br> | |||
[設定]画面の左ペインにある[ビルド、実行、デプロイ] - [ツールチェーン]を選択する。<br> | |||
[設定]画面の右ペインにある[+]アイコンを選択して、[システム]を選択する。<br> | |||
<br> | |||
* ツールチェーンの設定項目 | |||
** [名前] | |||
**: 任意の名前を入力する。 | |||
** [CMake:] | |||
**: PinePhone向けQtライブラリのビルドに使用したCMakeファイルのパスを入力する。 | |||
** [ビルドツール:] | |||
**: PinePhone向けQtライブラリのビルドに使用したNinjaファイルのパスを入力する。 | |||
** [C コンパイラー:] | |||
**: PinePhone向けQtライブラリのビルドに使用したGCCファイルのパスを入力する。 | |||
**: 例: /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-gcc | |||
** [C++ コンパイラー:] | |||
**: PinePhone向けQtライブラリのビルドに使用したG++ファイルのパスを入力する。 | |||
**: 例: /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-g++ | |||
** [デバッガー:] | |||
**: GCCツールチェーンのGDBファイルのパスを入力する。 | |||
**: 例: /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-gdb | |||
<br> | |||
[設定]画面の右ペイン下部にある[適用]ボタンを押下する。<br> | |||
<br> | |||
==== CMakeの設定 ==== | |||
[ファイル]メニューバー - [設定]を選択する。<br> | |||
[設定]画面の左ペインにある[ビルド、実行、デプロイ] - [CMake]を選択する。<br> | |||
[設定]画面の右ペインにある[+]アイコンを選択する。<br> | |||
<br> | |||
* CMakeの設定項目 | |||
** [名前] | |||
**: 任意の名前を入力する。 | |||
** [ビルドタイプ:]プルダウン | |||
**: [Debug]または[Release]を選択する。 | |||
** [ツールチェーン:]プルダウン | |||
**: 上記で設定したツールチェーン名を選択する。 | |||
** [ジェネレーター:]プルダウン | |||
**: [デフォルトを使用する]を選択する。 | |||
**: 例: /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-gcc | |||
** [環境:]<br>[環境:]のテキストアイコンを選択して、[環境設定]画面を開く。<br>画面右上の[+]ボタンを押下して、各環境変数を設定する。 | |||
*** CMAKE_C_COMPILER | |||
***: PinePhone向けQtライブラリのビルドに使用したGCCファイルのパスを入力する。 | |||
***: 例: /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-gcc | |||
*** CMAKE_CXX_COMPILER | |||
***: PinePhone向けQtライブラリのビルドに使用したG++ファイルのパスを入力する。 | |||
***: 例: /<GCCツールチェーンのインストールディレクトリ>/bin/aarch64-linux-gnu-g++ | |||
*** CMAKE_PREFIX_PATH | |||
***: PinePhone向けQtライブラリのインストールディレクトリのパスを入力する。 | |||
***: 例: <PinePhone向けQtライブラリのインストールディレクトリ> | |||
*** CMAKE_TOOLCHAIN_FILE | |||
***: PinePhone向けQtライブラリのインストールディレクトリにあるビルド向けツールチェーンファイルのパスを入力する。 | |||
***: 例: /<PinePhone向けQtライブラリのインストールディレクトリ>/lib/cmake/Qt6/qt.toolchain.cmake | |||
*** QT_QMAKE_EXECUTABLE | |||
***: PinePhone向けQtライブラリのインストールディレクトリにあるqmakeファイルのパスを入力する。 | |||
***: 例: /<PinePhone向けQtライブラリのインストールディレクトリ>/bin/qmake-host | |||
<br> | |||
[設定]画面の右ペイン下部にある[適用]ボタンを押下する。<br> | |||
<br> | |||
==== SSHの設定 ==== | |||
[ファイル]メニューバー - [設定]を選択する。<br> | |||
[設定]画面の左ペインにある[ツール] - [SSH 構成]を選択する。<br> | |||
[設定]画面の右ペインにある[+]アイコンを選択する。<br> | |||
<br> | |||
* SSH構成の設定項目 | |||
** [ホスト:] | |||
**: PinePhoneのIPアドレスまたはホスト名を入力する。 | |||
** [ユーザー名:] | |||
**: PinePhoneのユーザ名を入力する。 | |||
** [認証タイプ:]プルダウン | |||
**: [パスワード]または[キーペア]を選択する。 | |||
** [秘密鍵ファイル:] (キーペアを選択した場合) | |||
**: 秘密鍵ファイルのパスを入力する。 | |||
** [パスフレーズ:] (キーペアを選択した場合、かつ、パスフレーズを設定した場合) | |||
**: 秘密鍵のパスフレーズを入力する。 | |||
** [構成ファイル ~/.ssh/configの構文解析]チェックボックス | |||
**: 任意 | |||
<br> | |||
[接続テスト]ボタンを押下して、PinePhoneにSSH接続する。<br> | |||
<br> | |||
[設定]画面の右ペイン右下にある[適用]ボタンを押下する。<br> | |||
<br> | |||
==== 各プロジェクトの設定 ==== | |||
CLionを起動して、[ファイル]メニューバー - [新規] - [プロジェクト...]を選択する。<br> | |||
[新規プロジェクト]画面から、[Qt Console 実行可能ファイル]または[Qt Widgets 実行可能ファイル]を選択する。<br> | |||
<br> | |||
新規プロジェクトの作成後、[実行]メニューバー - [実行構成の編集...]を選択する。<br> | |||
[実行/デバッグ構成]画面が開くので、画面左上にある[+]ボタンを押下して、[リモート GDB サーバー]を選択する。<br> | |||
画面左ペインに[リモート GDB サーバー]が追加される。<br> | |||
画面左ペインに[リモート GDB サーバー]を選択して、各種設定を行う。<br> | |||
<br> | |||
* [ターゲット:]プルダウン | |||
*: プロジェクト名を選択する。 | |||
* [実行可能ファイル:]プルダウン | |||
*: プロジェクト名を選択する。 | |||
* [GDB:]プルダウン | |||
*: 上記のツールチェーンの作成セクションで設定したGDBを選択する。 | |||
* [資格情報:]プルダウン | |||
*: 上記のSSHの設定セクションで設定したSSHを選択する。 | |||
* [実行可能ファイル...]ラジオボタン | |||
*: 任意 | |||
* [アップロードパス:] | |||
*: 実行可能バイナリが配置されるPinePhone上のディレクトリを入力する。 | |||
*: 例: /home/<PinePhoneのユーザ名>/CLion/Sample1/debug | |||
* ['target remote' ...] | |||
*: 自動的に入力される。 | |||
*: 例: <IPアドレスまたはホスト名>:1234 | |||
* [GDB サーバー引数:] | |||
*: Qt WidgetsまたはQMLを使用するプロジェクトの場合、デバッグまたは実行時において、実行可能バイナリに<code>-platform wayland</code>オプションを付加する必要がある。 | |||
*: 例: <code>:<GDBサーバのポート番号 例: 1234> /<実行可能バイナリが配置されるPinePhone上のディレクトリ>/debug/<実行バイナリのファイル名> -platform wayland</code> | |||
<br> | |||
次に、[拡張 GDB サーバーオプション]項目を設定する。<br> | |||
この設定は、PinePhoneにアップロードしたQtライブラリにおいて、デバッグまたは実行に関する設定を行う。<br> | |||
* [作業ディレクトリ:] | |||
*: 何も入力しない。 | |||
* [環境変数:]<br>[環境変数:]項目の右にあるテキストアイコンを選択する。<br>[環境変数]画面が開くので、画面左上にある[+]ボタンを押下して各種設定を入力する。 | |||
** DISPLAY | |||
**: :0 | |||
** QT_QPA_PLATFORMTHEME | |||
**: Qt 6の場合 : qt6ct | |||
**: Qt 5の場合 : qt5ct | |||
** PATH | |||
**: PinePhone上のQt6ライブラリをアップロードしたbinディレクトリのパスを入力する。 | |||
**: 例: /<Qt6ライブラリをアップロードしたディレクトリ>/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games | |||
** LD_LIBRARY_PATH | |||
**: PinePhone上のQt6ライブラリをアップロードしたlibディレクトリのパスを入力する。 | |||
**: 例: /<Qt6ライブラリをアップロードしたディレクトリ>/lib:/<Qt6ライブラリをアップロードしたディレクトリ>/plugins/qmltooling | |||
** QT_PLUGIN_PATH | |||
**: /<Qt6ライブラリをアップロードしたディレクトリ>/plugins | |||
** QT_QPA_PLATFORM_PLUGIN_PATH | |||
**: /<Qt6ライブラリをアップロードしたディレクトリ>/plugins/platforms | |||
** QML_IMPORT_PATH | |||
**: /<Qt6ライブラリをアップロードしたディレクトリ>/qml | |||
** QML2_IMPORT_PATH | |||
**: /<Qt6ライブラリをアップロードしたディレクトリ>/qml | |||
** QT_DEBUG_PLUGINS | |||
**: 0または1を入力する。 | |||
** LANG | |||
**: 日本語を設定する場合は、<code>ja_JP.UTF-8</code>と入力する。 | |||
<br> | |||
また、[拡張 GDB サーバーオプション]項目の設定は、プロジェクトディレクトリ内の<u>.idea/runConfigurations/<プロジェクト名>.xml</u>ファイルに保存されている。<br> | |||
このファイルを直接編集することにより、上記の設定を行うこともできる。<br> | |||
<br> | |||
CLion上で上記の設定を行うには煩雑なため、ファイルを直接編集することを推奨する。<br> | |||
cd <プロジェクトディレクトリ> | |||
vi .idea/runConfigurations/<プロジェクト名>.xml | |||
<br> | |||
<syntaxhighlight lang="xml"> | |||
<!-- .idea/runConfigurations/<プロジェクト名>.xml --> | |||
<component name="ProjectRunConfigurationManager"> | |||
<configuration ...略> | |||
<envs> | |||
<env name="DISPLAY" value=":0" /> | |||
<env name="LANG" value="ja_JP.UTF-8" /> | |||
<env name="QML2_IMPORT_PATH" value="/<Qt6ライブラリをアップロードしたディレクトリ>/qml" /> | |||
<env name="QML_IMPORT_PATH" value="/<Qt6ライブラリをアップロードしたディレクトリ>/qml" /> | |||
<env name="QT_DEBUG_PLUGINS" value="0" /> | |||
<env name="QT_PLUGIN_PATH" value="/<Qt6ライブラリをアップロードしたディレクトリ>/plugins" /> | |||
<env name="QT_QPA_PLATFORM_PLUGIN_PATH" value="/<Qt6ライブラリをアップロードしたディレクトリ>/plugins/platforms" /> | |||
<env name="QT_QPA_PLATFORMTHEME" value="qt6ct" /> | |||
<env name="LD_LIBRARY_PATH" value="/<Qt6ライブラリをアップロードしたディレクトリ>/lib:/<Qt6ライブラリをアップロードしたディレクトリ>/plugins/qmltooling" /> | |||
<env name="PATH" value="/<Qt6ライブラリをアップロードしたディレクトリ>/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" /> | |||
</envs> | |||
<!-- ...略 --> | |||
</configuration> | |||
</component> | |||
</syntaxhighlight> | |||
<br> | |||
==== GDBの設定 ==== | |||
プロジェクトにデバッグのためのより多くの設定が必要な場合、デバッガの初期化ファイル (GDBの場合は.gdbinit、LLDBの場合は.lldbinit) をプロジェクトディレクトリ直下に作成する。<br> | |||
このファイルは、他のプロジェクトと一緒にVCSで共有することもできる。<br> | |||
<br> | |||
一般的に、GDB / LLDBは起動時に初期化ファイルを一定の順序で読み込む。<br> | |||
まず、デバッガはユーザのホームディレクトリにある初期化ファイルを探して、次に、現在のプロジェクトディレクトリ直下にある初期化ファイルを探す。<br> | |||
<br> | |||
ただし、デフォルトの設定では、セキュリティ上の理由から、プロジェクト固有の初期化ファイルからのコマンドは実行されない。<br> | |||
そのため、ホームディレクトリの初期化ファイルである<u>~/.gdbinit</u>ファイルまたは<u>~/.lldbinit</u>ファイルを、以下に示すように編集する。<br> | |||
vi ~/.gdbinit または vi ~/.lldbinit | |||
<br> | |||
<syntaxhighlight lang="sh"> | |||
# ~/.gdbinitファイル または ~/.lldbinitファイル | |||
set auto-load safe-path / | |||
# または | |||
set auto-load local-gdbinit on | |||
add-auto-load-safe-path / | |||
</syntaxhighlight> | |||
<br> | |||
次に、プロジェクトディレクトリの直下に.gdbinitファイルを作成する。<br> | |||
cd <プロジェクトディレクトリ> | |||
vi .gdbinit または vi .lldbinit | |||
<br> | |||
<syntaxhighlight lang="sh"> | |||
# /<プロジェクトディレクトリ>/.gdbinitファイル または /<プロジェクトディレクトリ>/.lldbinitファイル | |||
set sysroot <PinePhoneのシステムルートディレクトリ> | |||
</syntaxhighlight> | |||
<br> | |||
CLionを起動して、任意のプロジェクトを開く。<br> | |||
CLionのメイン画面左にあるプロジェクトに.gdbinitファイル、または、.lldbinitファイルが追加されているかどうかを確認する。<br> | |||
<br><br> | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry Pi]][[カテゴリ:Qt]] | [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry Pi]][[カテゴリ:Qt]] |