ユーザ用ツール

サイト用ツール


ハイハイスクールアドベンチャー_qt版

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
ハイハイスクールアドベンチャー_qt版 [2025/09/26 23:33] – [インストーラとパッケージ] arakiハイハイスクールアドベンチャー_qt版 [2025/10/01 05:02] (現在) – [環境非依存化] araki
行 507: 行 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版 ====
行 640: 行 641:
 deb形式のパッケージにまとめることを想定しています。 deb形式のパッケージにまとめることを想定しています。
  
-パッケージングするためには、仮想ルートフォルダの下にイメージをインストールします。+<del>パッケージングするためには、仮想ルートフォルダの下にイメージをインストールします。
  
 <code bash> <code bash>
行 673: 行 674:
 <code bash> <code bash>
 $ dpkg-deb --root-owner-group --build package-root qhhsadv_1.0.0_ubutu24.04.2_amd64.deb $ dpkg-deb --root-owner-group --build package-root qhhsadv_1.0.0_ubutu24.04.2_amd64.deb
 +</code></del>
 +
 +パッケージングで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 "wildtree@gmail.com")
 +
 +    # Debian パッケージ用のメタ情報
 +    set(CPACK_GENERATOR "DEB")
 +    set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Hiroyuki Araki") # 必須
 +    set(CPACK_DEBIAN_PACKAGE_SECTION "games")
 +    set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt6core6 (>= 6.4.0), libc6 (>= 2.34), libqt6widget6 (>= 6.4.0)")
 +
 +    # アーキテクチャ指定(自動判定も可能)
 +    string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" DETECTED_ARCH)
 +
 +    if(DETECTED_ARCH STREQUAL "x86_64")
 +        set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
 +    elseif(DETECTED_ARCH STREQUAL "aarch64")
 +        set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "arm64")
 +    elseif(DETECTED_ARCH MATCHES "armv7")
 +        set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "armhf")
 +    else()
 +        set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${DETECTED_ARCH}") # fallback
 +    endif()
 +
 +    include(CPack)
 +endif()
 +</code>
 +
 +インストールターゲットとか特には必要としません。
 +パッケージの作成までは以下の手順になります。
 +
 +<code bash>
 +$ git clone https://github.com/wildtree/qhhsadv.git
 +$ cd qhhsadv
 +$ cmake -B build -DCMAKE_BUILD_TYPE=Release
 +$ cmake --build build --target all
 +$ cpack -G DEB -C Release --config build/CPackConfig.cmake
 +</code>
 +
 +インストールは dpkgでも aptでも好きなのでインストーラを走らせるだけです。
 +カレントフォルダに qhhsadv_1.1.1_Linux.deb のようなファイルができます。
 +バージョン番号は、CMakeLists.txtの頭の方に書いてあります。
 +
 +<code cmake>
 +# Application basic information
 +set(APP_NAME "qhhsadv")
 +set(APP_VERSION_MAJOR "1")
 +set(APP_VERSION_MINOR "1")
 +set(APP_VERSION_PATCH "1")
 +set(APP_VERSION "${APP_VERSION_MAJOR}.${APP_VERSION_MINOR}.${APP_VERSION_PATCH}")
 +</code>
 +
 +<code bash>
 +$ sudo apt install -y ./qhhsadv_1.0.0_ubuntu24.04.02_amd64.deb
 </code> </code>
  
 === Windows === === 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
 +</code>
 +
 +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: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl"
 +Name: "english"; MessagesFile: "compiler:Default.isl"
 +
 +[Tasks]
 +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
 +
 +[Files]
 +; Qtアプリ本体と依存DLLをまとめたフォルダを指定
 +Source: "deploy\qhhsadv.exe"; DestDir: "{app}"; Flags: ignoreversion
 +Source: "deploy\*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs ignoreversion
 +
 +; リソースディレクトリ
 +Source: "deploy\data\*"; DestDir: "{app}\data"; Flags: recursesubdirs createallsubdirs ignoreversion
 +
 +[Icons]
 +Name: "{group}\ハイハイスクールアドベンチャー"; Filename: "{app}\qhhsadv.exe"
 +Name: "{commondesktop}\ハイハイスクールアドベンチャー"; Filename: "{app}\qhhsadv.exe"; Tasks: desktopicon
 +
 +[Run]
 +; インストール完了後に起動するオプション
 +Filename: "{app}\qhhsadv.exe"; Description: "{cm:LaunchProgram,ハイハイスクールアドベンチャー}"; Flags: nowait postinstall skipifsilent
 +</file>
 +
 +デプロイするのに必要なファイルやフォルダを、インストーラの作業ディレクトリの下の deploy にまとめることにします。
 +この方針に合うように CMakeLists.txt に WIN32用の記述を追加していきます。
 +
 +<code cmake>
 +if(WIN32)
 +    # デプロイ先ディレクトリ
 +    set(DEPLOY_DIR ${CMAKE_BINARY_DIR}/installer/deploy)
 +
 +    # コピー対象
 +    set(APP_EXE $<TARGET_FILE:qhhsadv>)
 +    set(DATA_DIR ${CMAKE_BINARY_DIR}/data)
 +
 +    # デプロイ処理
 +    add_custom_command(
 +        TARGET qhhsadv POST_BUILD
 +        COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPLOY_DIR}
 +        COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:qhhsadv> ${DEPLOY_DIR}
 +        COMMAND ${CMAKE_COMMAND} -E copy_directory ${DATA_DIR} ${DEPLOY_DIR}/data
 +        COMMENT "Copying files to installer/deploy..."
 +    )
 +
 +    # Qt DLL やプラグインを集める場合(windeployqt)
 +    # Qt bin ディレクトリを探す
 +    get_target_property(QT_QMAKE_EXECUTABLE Qt6::qmake IMPORTED_LOCATION)
 +    get_filename_component(QT_BIN_DIR "${QT_QMAKE_EXECUTABLE}" DIRECTORY)
 +
 +    set(WINDEPLOYQT_EXECUTABLE "${QT_BIN_DIR}/windeployqt.exe")
 +
 +    add_custom_command(
 +        TARGET qhhsadv POST_BUILD
 +        COMMAND "${WINDEPLOYQT_EXECUTABLE}" --dir ${DEPLOY_DIR} $<TARGET_FILE:qhhsadv>
 +        COMMENT "Running windeployqt..."
 +    )
 +
 +    add_custom_command(
 +        TARGET qhhsadv POST_BUILD
 +        COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/installer
 +        COMMENT "Copying setup.iss..."
 +    )
 +    configure_file(${CMAKE_SOURCE_DIR}/installer/setup.iss.in ${CMAKE_BINARY_DIR}/installer/setup.iss @ONLY)
 +
 +    # Inno Setup コンパイラを探す
 +
 +    find_program(INNO_SETUP_COMPILER
 +        NAMES ISCC iscc
 +        HINTS
 +            "$ENV{LOCALAPPDATA}/Programs/Inno Setup 6"
 +    )
 +    # 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}/installer/setup.iss)
 +
 +        # 出力先(例: build ディレクトリ内)
 +        set(INSTALLER_OUTPUT ${CMAKE_BINARY_DIR}/installer/qhhsadv_setup.exe)
 +
 +        add_custom_command(
 +            OUTPUT ${INSTALLER_OUTPUT}
 +            COMMAND "${INNO_SETUP_COMPILER}" "${INNO_SCRIPT}"
 +            DEPENDS qhhsadv  # アプリ本体がビルドされてから実行
 +            WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
 +            COMMENT "Building Inno Setup installer..."
 +        )
 +
 +        add_custom_target(installer ALL
 +            DEPENDS ${INSTALLER_OUTPUT}
 +        )
 +    else()
 +        message(WARNING "Inno Setup (ISCC.exe) not found. Skipping installer target.")
 +    endif()
 +endif()
 +</code>
  
 +Windows版Qtには、必要なDLLなどをまとめてくれる windeployqt.exe というツールが入っていて、これがDLLをかき集めてくれます。
 +ランタイムパッケージなどの提供がないQtなので、これはWindows版をデプロイするのには必須です。
  
 +生成されたプログラム、リソースなどをコピーして、DLLなどをかき集めたら、ISCC.exe を呼び出して、インストーラに仕上げます。
  
 +ここまでを、Windows環境でビルドを走らせると一気にやってくれます。
  
ハイハイスクールアドベンチャー_qt版.1758929621.txt.gz · 最終更新: by araki