Skip to content

优化 编译、构建流程; #56

优化 编译、构建流程;

优化 编译、构建流程; #56

Workflow file for this run

name: CMake Build
on:
# push代码时触发workflow
push:
paths-ignore: # 下列文件的变更不触发部署,可以自行添加
- '.github/workflows/clean_cache.yml'
- '.github/workflows/delete_workflow.yml'
- '.github/workflows/qmake.yml'
- '.github/workflows/readme.yml'
- '.github/workflows/toolchain.yml'
- 'doc/**'
- 'translation/**'
- '.clang-*'
- '.gitignore'
- 'LICENSE'
- 'README*'
pull_request:
paths-ignore: # 下列文件的变更不触发部署,可以自行添加
- '.github/workflows/clean_cache.yml'
- '.github/workflows/delete_workflow.yml'
- '.github/workflows/qmake.yml'
- '.github/workflows/readme.yml'
- '.github/workflows/toolchain.yml'
- 'doc/**'
- 'translation/**'
- '.clang-*'
- '.gitignore'
- 'LICENSE'
- 'README*'
jobs:
build:
name: Build
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- windows-latest
- macos-latest
- ubuntu-latest
qt_ver:
- 6.7.0
qt_modules:
- qt5compat qtserialport qtnetworkauth qtmultimedia qtimageformats
build_type:
- "RelWithDebInfo"
generators:
- "Ninja"
arch:
- x86_64
vcpkg_libs:
- breakpad
include:
- os: macos-latest
qt_ver: 6.7.0
qt_modules: qt5compat qtserialport qtnetworkauth qtmultimedia qtimageformats
build_type: "RelWithDebInfo"
generators: "Ninja"
arch: arm64
vcpkg_libs: breakpad
steps:
- name: Set macos deployment target
if: startsWith(matrix.os, 'macos')
shell: bash
run: |
echo "MACOSX_DEPLOYMENT_TARGET=11.0" >> $GITHUB_ENV
- name: Restore windows vcpkg
if: startsWith(matrix.os, 'windows')
uses: actions/cache/restore@v4
with:
path: C:\vcpkg\installed
key: ${{ runner.os }}-vcpkg-installed-${{ matrix.os }}
- name: Restore macos or ubuntu vcpkg
if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu')
uses: actions/cache/restore@v4
with:
path: /usr/local/share/vcpkg/installed
key: ${{ runner.os }}-vcpkg-installed-${{ matrix.os }}
- name: Install dependencies on windows
if: startsWith(matrix.os, 'windows')
shell: bash
run: |
choco install ninja
ninja --version
cmake --version
vcpkg install ${{ matrix.vcpkg_libs }} --triplet x64-windows || (cat ./build/vcpkg_installed/vcpkg/issue_body.md && exit 1)
- name: Install dependencies on ubuntu
if: startsWith(matrix.os, 'ubuntu')
shell: bash
run: |
sudo apt-get update
sudo apt-get install ninja-build build-essential libgl1-mesa-dev
ninja --version
cmake --version
gcc --version
vcpkg install ${{ matrix.vcpkg_libs }} --triplet x64-linux || (cat ./build/vcpkg_installed/vcpkg/issue_body.md && exit 1)
- name: Install dependencies on macos-x86_64
if: startsWith(matrix.os, 'macos') && matrix.arch == 'x86_64'
shell: bash
run: |
brew install ninja pkg-config
ninja --version
cmake --version
clang --version
vcpkg install ${{ matrix.vcpkg_libs }} --triplet x64-osx || (cat ./build/vcpkg_installed/vcpkg/issue_body.md && exit 1)
- name: Install dependencies on macos-arm64
if: startsWith(matrix.os, 'macos') && matrix.arch == 'arm64'
shell: bash
run: |
brew install ninja pkg-config
ninja --version
cmake --version
clang --version
vcpkg install ${{ matrix.vcpkg_libs }} --triplet arm64-osx || (cat ./build/vcpkg_installed/vcpkg/issue_body.md && exit 1)
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: ${{ matrix.qt_ver }}
install-deps: 'true'
modules: '${{ matrix.qt_modules }}'
cache: 'true'
- uses: actions/checkout@v4
with:
fetch-depth: 1
# jurplel/install-qt-action@v3, 这个action会修改默认的python版本,
# 会导致部分使用vcpkg的库编译失败,比如libsystemd,所以需要删除vcpkg.json
- name: Delete vcpkg.json
shell: bash
run: |
rm vcpkg.json
- name: Configure msvc for amd64
if: startsWith(matrix.os, 'windows')
uses: ilammy/msvc-dev-cmd@v1
with:
arch: amd64
- name: Configure windows
if: startsWith(matrix.os, 'windows')
shell: bash
run: |
cmake \
-S . \
-B ./build \
-DCMAKE_C_COMPILER=cl \
-DCMAKE_CXX_COMPILER=cl \
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
-G "${{ matrix.generators }}" \
-DCMAKE_INSTALL_PREFIX:PATH=instdir
- name: Configure macos or ubuntu
if: startsWith(matrix.os, 'macos') || startsWith(matrix.os, 'ubuntu')
shell: bash
run: |
cmake \
-S . \
-B ./build \
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \
-DCMAKE_OSX_ARCHITECTURES="${{ matrix.arch }}" \
-G "${{ matrix.generators }}" \
-DCMAKE_INSTALL_PREFIX:PATH=instdir
- name: Build
shell: bash
run: |
cmake --build ./build --config ${{ matrix.build_type }}
- name: Deploy Windows
if: startsWith(matrix.os, 'windows')
shell: bash
run: |
cd ./bin-64/${{ matrix.build_type }}
# deploy contains plugins
cp -rf ./plugins/* .
files=$(find . -maxdepth 1 -type f -printf '%P\n')
for file in $files;
do
if [[ $file == *.exe || $file == *.dll ]]; then
windeployqt --force --compiler-runtime $file
fi
done
rm -rf *plugin.dll
ls -l
- name: Deploy macos
if: startsWith(matrix.os, 'macos')
shell: bash
run: |
macdeployqt ./bin-64/${{ matrix.build_type }}/Qt-App.app -always-overwrite
ls -l ./bin-64/${{ matrix.build_type }}/Qt-App.app/Contents/Frameworks
rm -rf ./bin-64/${{ matrix.build_type }}/plugins
rm -f ./bin-64/${{ matrix.build_type }}/CrashReport
rm -f ./bin-64/${{ matrix.build_type }}/*.dylib
# make dmg
pip3 install dmgbuild
dmgbuild -s ./packaging/macos/Qt-App.dmgbuild.py "Qt-App" ./bin-64/${{ matrix.build_type }}/Qt-App.dmg
- name: Deploy ubuntu
if: startsWith(matrix.os, 'ubuntu')
shell: bash
run: |
sudo add-apt-repository universe
sudo apt update
sudo apt install libfuse2 libxcb-cursor0
wget -c -nv "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage"
chmod a+x linuxdeployqt-continuous-x86_64.AppImage
cp -f ./packaging/ubuntu/Qt-App.desktop ./bin-64/${{ matrix.build_type }}/Qt-App.desktop
cp -f ./src/resource/icon/app.png ./bin-64/${{ matrix.build_type }}/app.png
cp -f ./bin-64/${{ matrix.build_type }}/plugins/* ./bin-64/${{ matrix.build_type }}
so_files=$(find ./bin-64/${{ matrix.build_type }} -maxdepth 1 -name "*.so" -printf '%P\n')
for so_file in $so_files;
do
./linuxdeployqt-continuous-x86_64.AppImage \
./bin-64/${{ matrix.build_type }}/$so_file \
-qmake=${{ env.Qt6_DIR }}/bin/qmake \
-always-overwrite -unsupported-allow-new-glibc
done
rm -f ./bin-64/${{ matrix.build_type }}/AppRun
./linuxdeployqt-continuous-x86_64.AppImage \
./bin-64/${{ matrix.build_type }}/Qt-App \
-executable=./bin-64/${{ matrix.build_type }}/CrashReport \
-qmake=${{ env.Qt6_DIR }}/bin/qmake \
-always-overwrite -unsupported-allow-new-glibc \
-appimage
rm linuxdeployqt-continuous-x86_64.AppImage
rm -f ./bin-64/${{ matrix.build_type }}/*.so
mv *.AppImage ./bin-64/${{ matrix.build_type }}
- name: 7z package
shell: bash
run: |
ls -al ./bin-64/${{ matrix.build_type }}
7z a -t7z -r -mx=9 -mmt Qt-App-${{ matrix.os }}-${{matrix.arch}}-${{ matrix.build_type }}.7z ./bin-64/${{ matrix.build_type }}/*
- name: Upload packages
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os }}-${{matrix.arch}}-${{ matrix.build_type }}
path: Qt-App-${{ matrix.os }}-${{matrix.arch}}-${{ matrix.build_type }}.7z
release:
name: Release
needs: build
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
steps:
- name: Download fonts
shell: bash
run: |
wget -c -nv "https://github.com/RealChuan/Qt-App/releases/download/0.0.1/fonts.7z"
- name: Download packages
uses: actions/download-artifact@v3
- name: Move packages
shell: bash
run: |
ls -al
mv ./windows-latest-x86_64-RelWithDebInfo/Qt-App-*.7z .
mv ./ubuntu-latest-x86_64-RelWithDebInfo/Qt-App-*.7z .
mv ./macos-latest-x86_64-RelWithDebInfo/Qt-App-*.7z .
mv ./macos-latest-arm64-RelWithDebInfo/Qt-App-*.7z .
ls -al
- name: Create Release
uses: softprops/action-gh-release@v1
with:
draft: false
prerelease: false
generate_release_notes: true
files: |
*.7z