Skip to content

Add auto build #119

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 33 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
f52c868
format time and change lf EOF to crlf
Mikachu2333 May 16, 2025
8374705
添加自动构建工作流配置
Mikachu2333 May 16, 2025
5cb1d80
f
Mikachu2333 May 16, 2025
261971c
test
Mikachu2333 May 16, 2025
f49a35c
优化构建配置,分离QT版本和架构变量,更新下载链接和安装路径
Mikachu2333 May 16, 2025
1326768
fix typo
Mikachu2333 May 16, 2025
d9d7e2b
更新构建步骤,添加环境变量QTMSBUILDS和QTVERSION以支持Qt构建
Mikachu2333 May 16, 2025
449d01c
fix
Mikachu2333 May 16, 2025
3e1f6f5
更新构建配置,修改QT_ARCH为mingw1310_64,添加Ninja安装步骤,并重构构建过程以支持CMake
Mikachu2333 May 16, 2025
dc7ef61
更新CMake配置,设置CMAKE_PREFIX_PATH为${QT_PATH}/lib/cmake/Qt6,并在构建步骤中添加tree命…
Mikachu2333 May 16, 2025
b971c1d
更新安装Ninja步骤,改用wget下载并解压ninja-win.zip
Mikachu2333 May 16, 2025
d85c637
更新构建步骤,改用choco安装Wget和Ninja,简化安装过程
Mikachu2333 May 16, 2025
45d5188
更新构建步骤,修改tree命令以显示工作区的文件结构和文件详细信息
Mikachu2333 May 16, 2025
7ce2697
fix
Mikachu2333 May 16, 2025
10e16d4
更新构建步骤,添加CMake安装,修改cmake_minimum_required版本为4.0.2
Mikachu2333 May 16, 2025
470aa17
更新CMakeLists.txt,修改CMAKE_PREFIX_PATH以适应Qt6库路径结构;在build.yml中添加QT6_Dir环…
Mikachu2333 May 16, 2025
76aee14
更新CMakeLists.txt,添加对资源文件的处理,支持MSVC和MinGW环境下的资源编译
Mikachu2333 May 16, 2025
f7a0058
更新CMakeLists.txt,修改CMAKE_PREFIX_PATH以直接添加Qt库路径
Mikachu2333 May 16, 2025
80d4962
更新build.yml,移除QT6_Dir和Qt6BundledZLIB_DIR环境变量
Mikachu2333 May 16, 2025
8e9d23a
更新CMakeLists.txt,添加QT_MODULE路径到CMAKE_MODULE_PATH以支持Qt模块查找
Mikachu2333 May 16, 2025
78bbb58
更新CMakeLists.txt,设置CMAKE_INCLUDE_PATH和CMAKE_LIBRARY_PATH以支持Qt库查找;更新bu…
Mikachu2333 May 16, 2025
8f25d5f
更新build.yml,添加Chocolatey包缓存步骤;添加Qt和QtMSBuild的缓存步骤以优化构建过程
Mikachu2333 May 16, 2025
0c231f4
fix
Mikachu2333 May 16, 2025
34e25a7
1
Mikachu2333 May 16, 2025
ed6c561
更新build.yml,升级actions/cache版本至v4.2.3,并调整缓存键配置;修改上传工件路径为build目录
Mikachu2333 May 16, 2025
a5cbc50
f
Mikachu2333 May 16, 2025
f6428e6
更新build.yml,修正Chocolatey缓存键配置;优化CMake和MSBuild构建步骤以支持静态链接
Mikachu2333 May 16, 2025
13ae1be
更新 build.yml
Mikachu2333 May 16, 2025
39ffeb3
更新 build.yml
Mikachu2333 May 16, 2025
0851e8b
1
Mikachu2333 May 17, 2025
547664e
Merge branch 'xland:main' into add_auto_build
Mikachu2333 May 17, 2025
6bfe342
use ms only
Mikachu2333 May 17, 2025
455dcc6
优化 Chocolatey 缓存键,移除对 CMakeLists.txt 的哈希依赖
Mikachu2333 May 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 127 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
name: AutoBuild

on:
push:
branches: ["main", "add_auto_build"]
paths-ignore:
- ".gitignore"
- "*.md"
- "**.txt"
- "LICENSE"
pull_request:
branches: ["main", "add_auto_build"]
paths-ignore:
- ".gitignore"
- "*.md"
- "**.txt"
- "LICENSE"
workflow_dispatch:

env:
CARGO_TERM_COLOR: always
CMAKE_BUILD_PARALLEL_LEVEL: 4

jobs:
build:
runs-on: windows-latest
permissions:
contents: write
actions: write

env:
QT_DIR: ${{ github.workspace }}/Qt
QtMSBuild: ${{ github.workspace }}/QtMSBuild
QT_VERSION: "6.9.0-static"
QT_ARCH: "msvc2022_64" # "msvc2022_64"/"mingw1310_64"
CHOCO_CACHE_DIR: C:\Users\runneradmin\AppData\Local\Temp\chocolatey

steps:
- uses: actions/checkout@v4

# 缓存 Chocolatey 包
- name: Cache Chocolatey packages
uses: actions/[email protected]
with:
path: ${{ env.CHOCO_CACHE_DIR }}
key: chocolatey-${{ runner.os }}

- name: Install Wget, Cmake and Ninja
shell: pwsh
run: |
choco install -y wget
choco install -y ninja
choco install -y cmake

- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
with:
msbuild-architecture: x64

# 缓存 Qt 库
- name: Cache Qt library
id: cache-qt
uses: actions/[email protected]
with:
path: ${{ env.QT_DIR }}
key: qt-${{ runner.os }}-${{ env.QT_VERSION }}-${{ env.QT_ARCH }}

# 只有当缓存未命中时才安装 Qt
- name: Install Qt
if: steps.cache-qt.outputs.cache-hit != 'true'
shell: pwsh
run: |
mkdir ${{ env.QT_DIR }}
$url = "https://github.com/yuanpeirong/buildQt/releases/download/Qt6.9.0_rev0/Qt_${{ env.QT_VERSION }}-Release_${{ env.QT_ARCH }}.7z"
$output = "$env:TEMP\qt.7z"
Invoke-WebRequest -Uri $url -OutFile $output
7z x "$output" -o"${{ env.QT_DIR }}" -y

# 缓存 QtMSBuild
- name: Cache QtMSBuild
id: cache-qtmsbuild
uses: actions/[email protected]
with:
path: ${{ env.QtMSBuild }}
key: qtmsbuild-${{ runner.os }}-3.3.1

# 只有当缓存未命中时才安装 QtMSBuild
- name: Install QtMSBuild
if: steps.cache-qtmsbuild.outputs.cache-hit != 'true'
shell: pwsh
run: |
$url = "https://download.qt.io/official_releases/vsaddin/3.3.1/qt-vsaddin-msbuild-3.3.1.zip"
$output = "$env:TEMP\qt-vsaddin-msbuild.zip"
$qtMsBuildDir = "${{ env.QtMSBuild }}"

Write-Host "Downloading Qt VSADDIN MSBuild from $url"
Invoke-WebRequest -Uri $url -OutFile $output

Write-Host "Creating directory: $qtMsBuildDir"
New-Item -ItemType Directory -Force -Path $qtMsBuildDir | Out-Null

Write-Host "Extracting files to $qtMsBuildDir"
Expand-Archive -Path $output -DestinationPath $qtMsBuildDir -Force

Write-Host "QtMSBuild installation completed"

- name: Build
shell: pwsh
env:
QTMSBUILDS: ${{ env.QtMSBuild }}
QT_PATH: ${{ env.QT_DIR }}/${{ env.QT_VERSION }}/${{ env.QT_ARCH }}
run: |
msbuild ScreenCapture.sln `
/p:Configuration=Release `
/p:Platform=x64 `
/p:RuntimeLibrary=MultiThreaded `
/p:LinkIncremental=false `
/m

tree /F /A ${{ github.workspace }}

- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: ScreenCapture-Release
path: |
${{ github.workspace }}/build
2 changes: 1 addition & 1 deletion App/Util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ bool Util::saveToFile(const QImage& img)
img.save(savePath, "PNG", compressQuality);
return true;
}
auto fileName = "Img" + QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz") + ".png";
auto fileName = "Img" + QDateTime::currentDateTime().toString("yyyy-MM-dd@hh-mm-ss-zzz") + ".png";
QString filePath;
if (savePath.isEmpty()) {
QFileDialog dialog(nullptr, Lang::get("saveFile"));
Expand Down
159 changes: 159 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
cmake_minimum_required(VERSION 3.16)
project(ScreenCapture LANGUAGES CXX)

set(CMAKE_MESSAGE_LOG_LEVEL "ERROR")

# 设置C++标准
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Qt设置
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

# 构建类型设置
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif()

# 配置特定设置
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_compile_definitions(DEBUG)
endif()

# 设置静态链接运行时库
if(MSVC)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO")
add_definitions(-DWIN32_LEAN_AND_MEAN)
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -static-libgcc -static-libstdc++")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive")
endif()

# 自动收集源文件和头文件
file(GLOB_RECURSE PROJECT_SOURCES
"App/*.cpp"
"Shape/*.cpp"
"Tool/*.cpp"
"Win/*.cpp"
"main.cpp"
)
file(GLOB_RECURSE PROJECT_HEADERS
"App/*.h"
"Shape/*.h"
"Tool/*.h"
"Win/*.h"
)

# 确保每次构建都检查文件列表
set_property(DIRECTORY PROPERTY CMAKE_CONFIGURE_DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/App"
"${CMAKE_CURRENT_SOURCE_DIR}/Shape"
"${CMAKE_CURRENT_SOURCE_DIR}/Tool"
"${CMAKE_CURRENT_SOURCE_DIR}/Win"
)

# 添加资源
set(RESOURCES
res.qrc
)

# 设置CMake查找Qt模块的路径
set(CMAKE_PREFIX_PATH "$ENV{QT_PATH}")
set(CMAKE_INCLUDE_PATH "$ENV{QT_PATH}/include")
set(CMAKE_LIBRARY_PATH "$ENV{QT_PATH}/lib")
set(CMAKE_PROGRAM_PATH "$ENV{QT_PATH}/bin")

find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Concurrent)

# 特定于平台的依赖库
if(WIN32)
set(PLATFORM_LIBS
dwmapi.lib
shcore.lib
)
if(MSVC)
list(APPEND PLATFORM_LIBS
Ws2_32.lib
Winmm.lib
Imm32.lib
Dwrite.lib
D3d11.lib
Iphlpapi.lib
Crypt32.lib
Ole32.lib
Netapi32.lib
Userenv.lib
Version.lib
UxTheme.lib
Dwmapi.lib
Setupapi.lib
)
else()
list(APPEND PLATFORM_LIBS
-lws2_32
-lwinmm
-limm32
-ldwrite
-ld3d11
-liphlpapi
-lcrypt32
-lole32
-lnetapi32
-luserenv
-lversion
-luxtheme
-ldwmapi
-lsetupapi
)
endif()
endif()

# 处理资源文件
if(MSVC)
list(APPEND PROJECT_SOURCES App/Res.rc)
elseif(MINGW AND WIN32)
set(CMAKE_RC_COMPILER_INIT windres)
enable_language(RC)
set(CMAKE_RC_COMPILE_OBJECT
"<CMAKE_RC_COMPILER> -O coff -i <SOURCE> -o <OBJECT>")
list(APPEND PROJECT_SOURCES App/Res.rc)
endif()

# 创建可执行文件
add_executable(${PROJECT_NAME} WIN32
${PROJECT_SOURCES}
${PROJECT_HEADERS}
${RESOURCES}
Res/logo.ico
Res/iconfont.ttf
)

# 设置包含目录
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/Lib
)

# 链接Qt和平台库
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Concurrent
${PLATFORM_LIBS}
)

# 设置输出目录
set_target_properties(${PROJECT_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
)

# 调试版本特定设置
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
target_compile_definitions(${PROJECT_NAME} PRIVATE DEBUG)
endif()
Loading