Näillä ohjeilla voit julkaista sovelluksesi eli tehdä siitä version, joka voidaan suorittaa myös koneella, jossa ei ole Qt:ta.
Qt-sovelluksen julkaisussa käytetään kahta työkalua:
Tämä ohje opastaa Qt-sovelluksen asennuspaketin luomisessa Inno Setup -työkalulla.
Lataa ja asenna Inno Setup https://jrsoftware.org/isdl.php
Seuraavassa esimerkissä luodaan myapp Qt-sovelluksesta asennustiedosto.
Ennen asennuspaketin luomista sovellus täytyy kääntää Release-tilassa:
Tämän jälkeen build kansiosta löytyy myapp.exe tiedosto.
Qt-sovellukset tarvitsevat mukaan useita DLL-tiedostoja ja resursseja. Qt:n mukana tuleva windeployqt
työkalu kerää nämä automaattisesti.
Avaa komentokehote build kansioon ja suorita:
c:\Qt\6.9.1\mingw_64\bin\windeployqt.exe myapp.exe
Tämä komento kopioi kaikki tarvittavat Qt DLL-tiedostot, pluginit ja resurssit samaan kansioon sovelluksen kanssa.
windeployqt --release myapp.exeLuo tiedosto myapp.iss projektin juureen
; myapp Setup Script for Inno Setup
; Requires Inno Setup 6.0 or later
#define MyAppName "MyApp"
#define MyAppVersion "0.1"
#define MyAppPublisher "Your Name/Company"
#define MyAppExeName "myapp.exe"
#define MyAppURL "https://yourwebsite.com"
[Setup]
; Perusasetukset
AppId={{YOUR-UNIQUE-GUID-HERE}}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
LicenseFile=
InfoBeforeFile=
InfoAfterFile=
OutputDir=output
OutputBaseFilename=myappSetup
SetupIconFile=
Compression=lzma
SolidCompression=yes
WizardStyle=modern
PrivilegesRequired=admin
; Kieliasetukset
ShowLanguageDialog=auto
[Languages]
Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl"
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
; Pääohjelma ja kaikki riippuvuudet
Source: "build\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent
[Code]
// Tarkista että .NET Framework tai muut riippuvuudet on asennettu
function InitializeSetup(): Boolean;
begin
Result := True;
end;
Korvaa {YOUR-UNIQUE-GUID-HERE} uniikilla GUID:lla. Voit luoda sen esim. PowerShellissä:
[guid]::NewGuid().ToString().ToUpper()
Tai online-työkalulla: https://www.guidgenerator.com/
Esimerkki: AppId={{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}}
Jos haluat lisätä custom-ikonin:
.ico tiedosto (esim. app-icon.ico)SetupIconFile=myapp\app-icon.icoJos haluat näyttää lisenssin asennuksen aikana:
LICENSE.txt tiedostoLicenseFile=LICENSE.txtJos sovelluksesi tarvitsee konfiguraatiotiedostoja (esim. backend URL):
[Files]
Source: "myapp\config\*"; DestDir: "{app}\config"; Flags: ignoreversion
myapp.issoutput kansioon nimellä myappSetup.exe"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" myapp.iss
Edellä mainitussa iss-tiedostossa määritettävä ikoni tulee asennusohjelmalle. Qt-sovelluksen ikoni voidaan määrittää seuraaavasti
IDI_ICON1 ICON "favicon.ico"
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
appicon.rc
)
Setup-tiedoston koko on tyypillisesti 30-50 MB Qt-sovelluksille kaikkien riippuvuuksien kanssa.
Kun julkaiset uuden version:
#define MyAppVersion arvoaVoit automatisoida asennuspaketin luomisen ja julkaisun GitHub Actions -työkalulla. Seuraava workflow kääntää sovelluksesi, luo asennuspaketin ja julkaisee sen automaattisesti GitHub Releases -osiossa aina kun päivität release-branchin. Käyttäjät voivat sitten ladata ja asentaa sovelluksesi suoraan GitHubista.
Seuraavassa on esimerkki GitHub Action -workflow'sta. Esimerkissä käytetään Inno Setupia asennuspaketin luomiseen.
Huomaa, että sinun ei tarvitse ajaa windeployqt komentoa paikallisesti, mutta sinun on luotava iss-tiedosto.
Luo GitHub-repositoriosi juureen kansio .github/workflows ja lisää sinne tiedosto
create-release.yml seuraavalla sisällöllä:
Huom! Tässä esimerkissä Qt-sovellus ei ole Gitrepon juuressa vaan kansiossa myapp ja sovelluksen nimi on myöskin myapp.
name: Create GitHub Release
on:
push:
branches: [ release ]
permissions:
contents: write
jobs:
build-and-release:
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Get version from CMakeLists.txt
id: get_version
run: |
$version = Select-String -Path "myapp/CMakeLists.txt" -Pattern 'project\(myapp VERSION ([0-9.]+)\)' | ForEach-Object { $_.Matches.Groups[1].Value }
if (-not $version) {
$version = "1.0.0"
}
echo "VERSION=$version" >> $env:GITHUB_OUTPUT
echo "Version: $version"
shell: pwsh
- name: Install Qt
uses: jurplel/install-qt-action@v4
with:
version: '6.9.1'
host: 'windows'
target: 'desktop'
arch: 'win64_msvc2022_64'
modules: 'qtnetworkauth'
- name: Configure CMake
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
cmake -S myapp -B myapp/build -G "Ninja" -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="${{ env.QT_ROOT_DIR }}"
shell: cmd
- name: Build
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
cmake --build myapp/build
shell: cmd
- name: Deploy Qt dependencies
run: windeployqt myapp/build/myapp.exe --release
- name: Install Inno Setup
run: choco install innosetup -y
- name: Create installer
run: iscc myapp\myapp.iss
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ steps.get_version.outputs.VERSION }}
name: BankAutomat v${{ steps.get_version.outputs.VERSION }}
body: |
## BankAutomat v${{ steps.get_version.outputs.VERSION }}
### Lataa asennusohjelma
Lataa myappSetup.exe alta ja suorita se asentaaksesi sovelluksen.
### Muutokset
- Automaattisesti luotu release release-branchista
files: |
myapp/output/myappSetup.exe
draft: false
prerelease: false
Sinun on ehkä tehtävä GitHubissa repon asetuksissa seuraavat määritykset:
Jos haluat julkaista asennuspaketin webpalvelimellesi GitHub Releasen sijaan, lisää edelliseen workflow-tiedostoon seuraava step asennuspaketin luomisen jälkeen:
- name: Deploy to web server via SCP
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.WEB_SERVER_HOST }}
username: ${{ secrets.WEB_SERVER_USER }}
key: ${{ secrets.WEB_SERVER_SSH_KEY }}
port: 22
source: "myapp/output/myappSetup.exe"
target: ${{ secrets.WEB_SERVER_PATH }}
GitHub Secrets -muuttujat: Yllä olevassa esimerkissä käytetään secrets.WEB_SERVER_HOST, secrets.WEB_SERVER_USER jne. muuttujia. Näitä käytetään turvallisuussyistä - SSH-avaimia ja palvelimen tietoja ei saa koskaan kirjoittaa suoraan workflow-tiedostoon, koska ne näkyisivät julkisesti GitHubissa. GitHub Secrets tallentaa nämä salattuina.
Jotta saat edellisen toimimaan, sinun tulee määrittää SSH-avaimesi ja web-palvelimen tiedot GitHub Secrets -asetuksiin oheisen ohjeen mukaisesti: GitHub Secrets