ハイハイスクールアドベンチャー_qt版
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| ハイハイスクールアドベンチャー_qt版 [2025/09/26 07:50] – [概要] araki | ハイハイスクールアドベンチャー_qt版 [2025/10/01 05:02] (現在) – [環境非依存化] araki | ||
|---|---|---|---|
| 行 39: | 行 39: | ||
| 下にある説明に従ってビルドしてもいいかと思います。 | 下にある説明に従ってビルドしてもいいかと思います。 | ||
| - | * [[https:// | + | * [[https:// |
| * [[https:// | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| 行 52: | 行 52: | ||
| <code bash> | <code bash> | ||
| - | $ sudo apt install -y ./ | + | $ sudo apt install -y ./ |
| </ | </ | ||
| 行 60: | 行 60: | ||
| QtCreatorを使用して作成したので、QtCreatorを使ってビルドするのが簡単だが、cmakeで直接ビルドすることも可能である。 | QtCreatorを使用して作成したので、QtCreatorを使ってビルドするのが簡単だが、cmakeで直接ビルドすることも可能である。 | ||
| ソースはM5版同様[[https:// | ソースはM5版同様[[https:// | ||
| - | [[https:// | + | [[https:// |
| GitHubからは git clone で取得する。 | GitHubからは git clone で取得する。 | ||
| - | < | + | < |
| $ git clone https:// | $ git clone https:// | ||
| </ | </ | ||
| 行 70: | 行 70: | ||
| cmakeでビルドするなら、 | cmakeでビルドするなら、 | ||
| - | < | + | < |
| $ mkdir build | $ mkdir build | ||
| $ cd build | $ cd build | ||
| - | $ cmake .. | + | $ cmake -DCMAKE_INSTALL_PREFIX=/ |
| $ make | $ make | ||
| + | $ sudo make install | ||
| </ | </ | ||
| と、通常の cmakeの作法に従えばいい。 | と、通常の cmakeの作法に従えばいい。 | ||
| - | 実行は qhhsadv を実行すればいい。 | + | 実行は qhhsadv を実行する。 |
| + | |||
| + | インストールは / | ||
| {{: | {{: | ||
| 行 504: | 行 507: | ||
| とりあえず、WindowsとLinux ((Ubuntu 24.04LTS, Ubuntu 25.04、Debian 12(ARM64)で確認))でのビルドが可能なことは確認しました。 | とりあえず、WindowsとLinux ((Ubuntu 24.04LTS, Ubuntu 25.04、Debian 12(ARM64)で確認))でのビルドが可能なことは確認しました。 | ||
| + | ((なお、Apple系のデバイスは持ってないし買う気もないのでできるかどうかはどなたか試してください。)) | ||
| ==== Windows版 ==== | ==== Windows版 ==== | ||
| 行 568: | 行 572: | ||
| </ | </ | ||
| + | ==== インストーラとパッケージ ==== | ||
| + | |||
| + | Qtはマルチプラットフォームなので、ビルド後の扱いをまじめに考えるとちょっとめんどくさい。 | ||
| + | |||
| + | 基本的に、[[https:// | ||
| + | |||
| + | Linuxにしても、今どきのユーザはパッケージをインストールして使うスタイルの人も多いのでしょう。 | ||
| + | 何しろ、環境をセットアップして最初にやるべきことが build-essentialsをインストールすることなのですから。 | ||
| + | |||
| + | なので、インストールとパッケージについてあれこれ書いておきます。 | ||
| + | |||
| + | === Linux === | ||
| + | |||
| + | Linuxの場合は、ビルドしてインストールすることから始めます。 | ||
| + | パッケージも、インストールされたイメージをもとに作るので、まずはインストールなのです。 | ||
| + | |||
| + | make を走らせるのだから、make install すればいいだろうということですが、そのためには installターゲットが生成されなければなりません。 | ||
| + | |||
| + | Makefileは cmakeが作るのだから、cmakeに作るように指示しなければなりません。 | ||
| + | |||
| + | <code cmake> | ||
| + | if(UNIX AND NOT APPLE) | ||
| + | # 実行ファイルを / | ||
| + | install(TARGETS qhhsadv DESTINATION / | ||
| + | |||
| + | # data ディレクトリを / | ||
| + | install(DIRECTORY ${CMAKE_BINARY_DIR}/ | ||
| + | |||
| + | # ラッパースクリプトを /usr/bin にインストール | ||
| + | install(PROGRAMS ${CMAKE_SOURCE_DIR}/ | ||
| + | DESTINATION /usr/bin | ||
| + | RENAME qhhsadv) | ||
| + | # .desktop ファイル | ||
| + | install(FILES ${CMAKE_SOURCE_DIR}/ | ||
| + | DESTINATION / | ||
| + | |||
| + | # アイコン(48x48 の例) | ||
| + | install(FILES ${CMAKE_SOURCE_DIR}/ | ||
| + | DESTINATION / | ||
| + | endif() | ||
| + | </ | ||
| + | |||
| + | ビルドはマルチターゲットなので、Linuxは **UNIXかつ非APPLE**という扱いになります。 | ||
| + | ここに、インストールするものとその行先をずらずらと書いていきます。 | ||
| + | |||
| + | DESTINATIONに行き先を指定するわけですが、PREFIXとかつけないでいいのか? | ||
| + | といわれれば、それはcmakeがよしなにやってくれるから、気にせず、/ | ||
| + | |||
| + | データリソースの扱いは、本来、UNIX系の慣習に倣うなら、/ | ||
| + | |||
| + | なので、こういう感じでインストールする先として、最近では /opt が使われるので、/ | ||
| + | |||
| + | /usr/bin には / | ||
| + | |||
| + | あとは、 | ||
| + | |||
| + | <code bash> | ||
| + | $ cmake -DCMAKE_INSTALL_PREFIX=/ | ||
| + | $ make | ||
| + | $ sudo make install | ||
| + | </ | ||
| + | |||
| + | とすれば、インストールしてくれます。 | ||
| + | |||
| + | == パッケージング == | ||
| + | |||
| + | 以前なら、Slackware系、RedHat系、Debian系がしのぎを削っていましたが、今どきはもうDebian系一択でいいでしょう。 | ||
| + | deb形式のパッケージにまとめることを想定しています。 | ||
| + | |||
| + | < | ||
| + | |||
| + | <code bash> | ||
| + | $ make install DESTDIR=$PWD/ | ||
| + | </ | ||
| + | |||
| + | これで、./ | ||
| + | |||
| + | 次に、パッケージ用のファイルを作ります。 | ||
| + | |||
| + | <code bash> | ||
| + | $ mkdir ./ | ||
| + | </ | ||
| + | |||
| + | ./ | ||
| + | これは Ubuntu24.04.02 用のファイルになります。 | ||
| + | |||
| + | <file ini control> | ||
| + | Package: qhhsadv | ||
| + | Version: 1.0.0 | ||
| + | Section: games | ||
| + | Priority: optional | ||
| + | Architecture: | ||
| + | Maintainer: Hiroyuki Araki < | ||
| + | Depends: libc6 (>= 2.31), libqt6core6t64 (>= 6.4), libqt6multimedia6 (>=6.4), libqt6widgets6t64 (>= 6.4) | ||
| + | Description: | ||
| + | A Qt-based High High School Adventure implementation. | ||
| + | </ | ||
| + | |||
| + | あとは、パッケージの作成を行います。 | ||
| + | |||
| + | <code bash> | ||
| + | $ dpkg-deb --root-owner-group --build package-root qhhsadv_1.0.0_ubutu24.04.2_amd64.deb | ||
| + | </ | ||
| + | |||
| + | パッケージングでcontrolファイルを毎回作るの面倒くさいとAIにもちかけたら、CPackにすればいいじゃん、といわれました。 | ||
| + | なにそれ? | ||
| + | |||
| + | <code cmake> | ||
| + | if(UNIX AND NOT APPLE) | ||
| + | # パッケージの基本情報 | ||
| + | set(CPACK_PACKAGE_NAME ${APP_NAME}) | ||
| + | set(CPACK_PACKAGE_VERSION ${APP_VERSION}) | ||
| + | set(CPACK_PACKAGE_CONTACT " | ||
| + | |||
| + | # Debian パッケージ用のメタ情報 | ||
| + | set(CPACK_GENERATOR " | ||
| + | set(CPACK_DEBIAN_PACKAGE_MAINTAINER " | ||
| + | set(CPACK_DEBIAN_PACKAGE_SECTION " | ||
| + | set(CPACK_DEBIAN_PACKAGE_DEPENDS " | ||
| + | |||
| + | # アーキテクチャ指定(自動判定も可能) | ||
| + | string(TOLOWER " | ||
| + | |||
| + | if(DETECTED_ARCH STREQUAL " | ||
| + | set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE " | ||
| + | elseif(DETECTED_ARCH STREQUAL " | ||
| + | set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE " | ||
| + | elseif(DETECTED_ARCH MATCHES " | ||
| + | set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE " | ||
| + | else() | ||
| + | set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE " | ||
| + | endif() | ||
| + | |||
| + | include(CPack) | ||
| + | endif() | ||
| + | </ | ||
| + | |||
| + | インストールターゲットとか特には必要としません。 | ||
| + | パッケージの作成までは以下の手順になります。 | ||
| + | |||
| + | <code bash> | ||
| + | $ git clone https:// | ||
| + | $ cd qhhsadv | ||
| + | $ cmake -B build -DCMAKE_BUILD_TYPE=Release | ||
| + | $ cmake --build build --target all | ||
| + | $ cpack -G DEB -C Release --config build/ | ||
| + | </ | ||
| + | |||
| + | インストールは dpkgでも aptでも好きなのでインストーラを走らせるだけです。 | ||
| + | カレントフォルダに qhhsadv_1.1.1_Linux.deb のようなファイルができます。 | ||
| + | バージョン番号は、CMakeLists.txtの頭の方に書いてあります。 | ||
| + | |||
| + | <code cmake> | ||
| + | # Application basic information | ||
| + | set(APP_NAME " | ||
| + | set(APP_VERSION_MAJOR " | ||
| + | set(APP_VERSION_MINOR " | ||
| + | set(APP_VERSION_PATCH " | ||
| + | set(APP_VERSION " | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | $ sudo apt install -y ./ | ||
| + | </ | ||
| + | |||
| + | === Windows === | ||
| + | |||
| + | Windowsの場合は、Linuxのように、直接 make でインストールするのは現実的ではありません。 | ||
| + | なので、インストーラを作ってそれでインストールする形をとります。 | ||
| + | |||
| + | WiXかInno Setup 6のどっちかが定番らしいですが、WiXは基本的に Visal Studio 2022のプラグインとして使うのが普通なので、Qt Creator や cmakeでやるのはちょっとめんどくさそうです。 | ||
| + | |||
| + | なので、Inno Setup 6を使うことにします。 | ||
| + | Inno Setup 6は winget でインストールできます。 | ||
| + | |||
| + | <code powershell> | ||
| + | PS C:\> winget install JRSoftware.InnoSetup | ||
| + | </ | ||
| + | |||
| + | DEBIANのcontrol同様、Inno Setup には Setup.issという設定ファイルを作る必要があります。 | ||
| + | |||
| + | <file ini setup.iss.in> | ||
| + | ; ハイハイスクールアドベンチャー インストーラ (Inno Setup) | ||
| + | |||
| + | [Setup] | ||
| + | AppName=High High School Adventure Qt | ||
| + | AppVersion=@APP_VERSION@ | ||
| + | AppPublisher=WildTreeJP | ||
| + | DefaultDirName={commonpf}\QHHSAdv | ||
| + | DefaultGroupName=ハイハイスクールアドベンチャー | ||
| + | UninstallDisplayIcon={app}\qhhsadv.exe | ||
| + | OutputBaseFilename=qhhsadv_setup | ||
| + | Compression=lzma | ||
| + | SolidCompression=yes | ||
| + | |||
| + | [Languages] | ||
| + | Name: " | ||
| + | Name: " | ||
| + | |||
| + | [Tasks] | ||
| + | Name: " | ||
| + | |||
| + | [Files] | ||
| + | ; Qtアプリ本体と依存DLLをまとめたフォルダを指定 | ||
| + | Source: " | ||
| + | Source: " | ||
| + | |||
| + | ; リソースディレクトリ | ||
| + | Source: " | ||
| + | |||
| + | [Icons] | ||
| + | Name: " | ||
| + | Name: " | ||
| + | |||
| + | [Run] | ||
| + | ; インストール完了後に起動するオプション | ||
| + | Filename: " | ||
| + | </ | ||
| + | |||
| + | デプロイするのに必要なファイルやフォルダを、インストーラの作業ディレクトリの下の deploy にまとめることにします。 | ||
| + | この方針に合うように CMakeLists.txt に WIN32用の記述を追加していきます。 | ||
| + | |||
| + | <code cmake> | ||
| + | if(WIN32) | ||
| + | # デプロイ先ディレクトリ | ||
| + | set(DEPLOY_DIR ${CMAKE_BINARY_DIR}/ | ||
| + | |||
| + | # コピー対象 | ||
| + | set(APP_EXE $< | ||
| + | set(DATA_DIR ${CMAKE_BINARY_DIR}/ | ||
| + | |||
| + | # デプロイ処理 | ||
| + | add_custom_command( | ||
| + | TARGET qhhsadv POST_BUILD | ||
| + | COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPLOY_DIR} | ||
| + | COMMAND ${CMAKE_COMMAND} -E copy $< | ||
| + | COMMAND ${CMAKE_COMMAND} -E copy_directory ${DATA_DIR} ${DEPLOY_DIR}/ | ||
| + | COMMENT " | ||
| + | ) | ||
| + | |||
| + | # Qt DLL やプラグインを集める場合(windeployqt) | ||
| + | # Qt bin ディレクトリを探す | ||
| + | get_target_property(QT_QMAKE_EXECUTABLE Qt6::qmake IMPORTED_LOCATION) | ||
| + | get_filename_component(QT_BIN_DIR " | ||
| + | |||
| + | set(WINDEPLOYQT_EXECUTABLE " | ||
| + | |||
| + | add_custom_command( | ||
| + | TARGET qhhsadv POST_BUILD | ||
| + | COMMAND " | ||
| + | COMMENT " | ||
| + | ) | ||
| + | |||
| + | add_custom_command( | ||
| + | TARGET qhhsadv POST_BUILD | ||
| + | COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/ | ||
| + | COMMENT " | ||
| + | ) | ||
| + | configure_file(${CMAKE_SOURCE_DIR}/ | ||
| + | |||
| + | # Inno Setup コンパイラを探す | ||
| + | |||
| + | find_program(INNO_SETUP_COMPILER | ||
| + | NAMES ISCC iscc | ||
| + | HINTS | ||
| + | " | ||
| + | ) | ||
| + | # PATH に入っている場合も探す | ||
| + | if(NOT INNO_SETUP_COMPILER) | ||
| + | find_program(INNO_SETUP_COMPILER NAMES ISCC iscc) | ||
| + | endif() | ||
| + | |||
| + | if(INNO_SETUP_COMPILER) | ||
| + | message(STATUS "Inno Setup found: ${INNO_SETUP_COMPILER}" | ||
| + | |||
| + | # .iss スクリプトの場所 | ||
| + | set(INNO_SCRIPT ${CMAKE_BINARY_DIR}/ | ||
| + | |||
| + | # 出力先(例: | ||
| + | set(INSTALLER_OUTPUT ${CMAKE_BINARY_DIR}/ | ||
| + | |||
| + | add_custom_command( | ||
| + | OUTPUT ${INSTALLER_OUTPUT} | ||
| + | COMMAND " | ||
| + | DEPENDS qhhsadv | ||
| + | WORKING_DIRECTORY ${CMAKE_BINARY_DIR} | ||
| + | COMMENT " | ||
| + | ) | ||
| + | |||
| + | add_custom_target(installer ALL | ||
| + | DEPENDS ${INSTALLER_OUTPUT} | ||
| + | ) | ||
| + | else() | ||
| + | message(WARNING "Inno Setup (ISCC.exe) not found. Skipping installer target." | ||
| + | endif() | ||
| + | endif() | ||
| + | </ | ||
| + | |||
| + | Windows版Qtには、必要なDLLなどをまとめてくれる windeployqt.exe というツールが入っていて、これがDLLをかき集めてくれます。 | ||
| + | ランタイムパッケージなどの提供がないQtなので、これはWindows版をデプロイするのには必須です。 | ||
| + | 生成されたプログラム、リソースなどをコピーして、DLLなどをかき集めたら、ISCC.exe を呼び出して、インストーラに仕上げます。 | ||
| + | ここまでを、Windows環境でビルドを走らせると一気にやってくれます。 | ||
ハイハイスクールアドベンチャー_qt版.1758873029.txt.gz · 最終更新: by araki
