ユーザ用ツール

差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
ハイハイスクールアドベンチャー_qt版 [2025/09/26 23:40] – [インストーラとパッケージ] 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> </code>
  
 インストールは dpkgでも aptでも好きなのでインストーラを走らせるだけです。 インストールは 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> <code bash>
行 697: 行 753:
 DEBIANのcontrol同様、Inno Setup には Setup.issという設定ファイルを作る必要があります。 DEBIANのcontrol同様、Inno Setup には Setup.issという設定ファイルを作る必要があります。
  
-<file ini setup.iss>+<file ini setup.iss.in>
 ; ハイハイスクールアドベンチャー インストーラ (Inno Setup) ; ハイハイスクールアドベンチャー インストーラ (Inno Setup)
  
 [Setup] [Setup]
 AppName=High High School Adventure Qt AppName=High High School Adventure Qt
-AppVersion=1.1.0+AppVersion=@APP_VERSION@
 AppPublisher=WildTreeJP AppPublisher=WildTreeJP
 DefaultDirName={commonpf}\QHHSAdv DefaultDirName={commonpf}\QHHSAdv
行 734: 行 790:
 Filename: "{app}\qhhsadv.exe"; Description: "{cm:LaunchProgram,ハイハイスクールアドベンチャー}"; Flags: nowait postinstall skipifsilent Filename: "{app}\qhhsadv.exe"; Description: "{cm:LaunchProgram,ハイハイスクールアドベンチャー}"; Flags: nowait postinstall skipifsilent
 </file> </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環境でビルドを走らせると一気にやってくれます。
  

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information