diff --git a/.github/workflows/rpcs3.yml b/.github/workflows/rpcs3.yml
index e4bd597440..2778b9c89f 100644
--- a/.github/workflows/rpcs3.yml
+++ b/.github/workflows/rpcs3.yml
@@ -279,6 +279,131 @@ jobs:
DEPS_CACHE_DIR: ./dependency_cache
UPLOAD_COMMIT_HASH: 7d09e3be30805911226241afbb14f8cdc2eb054e
UPLOAD_REPO_FULL_NAME: "RPCS3/rpcs3-binaries-win"
+ SKIP_RPCS3_TEST: 'true'
+ steps:
+
+ - name: Checkout repository
+ uses: actions/checkout@main
+ with:
+ fetch-depth: 0
+
+ - name: Setup NuGet
+ uses: nuget/setup-nuget@v4
+
+ - name: Restore NuGet packages
+ run: nuget restore rpcs3.sln
+
+ - name: Setup env
+ shell: pwsh
+ run: |
+ echo "QTDIR=C:\Qt\${{ env.QT_VER }}\${{ env.QT_VER_MSVC }}_64" >> ${{ github.env }}
+ echo "VULKAN_SDK=C:\VulkanSDK\${{ env.VULKAN_VER }}" >> ${{ github.env }}
+
+ - name: Get Cache Keys
+ run: .ci/get_keys-windows.sh
+
+ - name: Restore Build Ccache
+ uses: actions/cache/restore@main
+ id: restore-build-ccache
+ with:
+ path: ${{ env.CCACHE_DIR }}
+ key: "${{ runner.os }}-ccache-${{ env.COMPILER }}-${{github.run_id}}"
+ restore-keys: ${{ runner.os }}-ccache-${{ env.COMPILER }}-
+
+ - name: Restore Dependencies Cache
+ uses: actions/cache/restore@main
+ id: restore-dependencies-cache
+ with:
+ path: ${{ env.DEPS_CACHE_DIR }}
+ key: "${{ runner.os }}-${{ env.COMPILER }}-${{ env.QT_VER }}-${{ env.VULKAN_SDK_SHA }}-${{ env.CCACHE_SHA }}-${{ hashFiles('llvm.lock') }}"
+ restore-keys: ${{ runner.os }}-${{ env.COMPILER }}-
+
+ - name: Download and unpack dependencies
+ run: |
+ .ci/setup-windows.sh
+ .ci/setup-windows-ci-vars.sh win64 msvc
+
+ - name: Export Variables
+ run: |
+ while IFS='=' read -r key val; do
+ # Skip lines that are empty or start with '#'
+ [[ -z "$key" || "$key" =~ ^# ]] && continue
+ echo "$key=$val" >> "${{ github.env }}"
+ done < .ci/ci-vars.env
+
+ - name: Add msbuild to PATH
+ uses: microsoft/setup-msbuild@main
+
+ - name: Compile RPCS3
+ shell: pwsh
+ run: msbuild rpcs3.sln /p:Configuration=Release /v:minimal /p:Platform=x64 /p:PreferredToolArchitecture=x64 /p:CLToolPath=${{ env.CCACHE_BIN_DIR }} /p:UseMultiToolTask=true /p:CustomAfterMicrosoftCommonTargets="${{ github.workspace }}\buildfiles\msvc\ci_only.targets"
+
+ - name: Pack up build artifacts
+ run: |
+ mkdir -p "${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}"
+ .ci/deploy-windows.sh
+
+ - name: Upload artifacts (7z)
+ uses: actions/upload-artifact@main
+ with:
+ name: RPCS3 for Windows (MSVC)
+ path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}
+ compression-level: 0
+ if-no-files-found: error
+
+ - name: Deploy master build to GitHub Releases
+ if: |
+ github.event_name != 'pull_request' &&
+ github.repository == 'RPCS3/rpcs3' &&
+ github.ref == 'refs/heads/master'
+ env:
+ RPCS3_TOKEN: ${{ secrets.RPCS3_TOKEN }}
+ run: .ci/github-upload.sh
+
+ - name: Show ccache stats
+ if: github.ref == 'refs/heads/master'
+ run: ccache --show-stats --verbose
+
+ - name: Save Build Ccache
+ if: github.ref == 'refs/heads/master'
+ uses: actions/cache/save@main
+ with:
+ path: ${{ env.CCACHE_DIR }}
+ key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
+
+ - name: Save Dependencies Cache
+ if: github.ref == 'refs/heads/master'
+ uses: actions/cache/save@main
+ with:
+ path: ${{ env.DEPS_CACHE_DIR }}
+ key: ${{ steps.restore-dependencies-cache.outputs.cache-primary-key }}
+
+ Windows_Build_Test:
+ # Only run push event on master branch of main repo, but run all PRs
+ needs: Clean_Code_Caches
+ if: github.event_name != 'push' || (github.repository == 'RPCS3/rpcs3' && github.ref_name == 'master')
+ name: RPCS3 Windows Unit Test
+ runs-on: windows-2025-vs2026
+ env:
+ COMPILER: msvc
+ QT_VER_MAIN: '6'
+ QT_VER: '6.11.2'
+ QT_VER_MSVC: 'msvc2022'
+ QT_DATE: '202608131017'
+ LLVM_VER: '22.1.8'
+ VULKAN_VER: '1.4.341.1'
+ VULKAN_SDK_SHA: 'bcf2d75aa9556889ab974858666e20b3655b6055a0db704ccb47279ff33b5bfe'
+ CCACHE_SHA: '859141059ac950e1e8cd042c66f842f26b9e3a62a1669a69fe6ba180cb58bbdf'
+ CCACHE_BIN_DIR: 'C:\ccache_bin'
+ CCACHE_DIR: 'C:\ccache'
+ CCACHE_INODECACHE: 'true'
+ CCACHE_SLOPPINESS: 'time_macros'
+ CCACHE_MAXSIZE: '7G'
+ CCACHE_LAUNCH_ARGS: '-DCMAKE_C_COMPILER_LAUNCHER=C:\ccache_bin\ccache.exe -DCMAKE_CXX_COMPILER_LAUNCHER=C:\ccache_bin\ccache.exe'
+ DEPS_CACHE_DIR: ./dependency_cache
+ UPLOAD_COMMIT_HASH: 7d09e3be30805911226241afbb14f8cdc2eb054e
+ UPLOAD_REPO_FULL_NAME: "RPCS3/rpcs3-binaries-win"
+ SKIP_RPCS3_EXE: 'true'
steps:
- name: Checkout repository
@@ -342,46 +467,6 @@ jobs:
shell: pwsh
run: build\lib\Release-x64\rpcs3_test.exe
- - name: Pack up build artifacts
- run: |
- mkdir -p "${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}"
- .ci/deploy-windows.sh
-
- - name: Upload artifacts (7z)
- uses: actions/upload-artifact@main
- with:
- name: RPCS3 for Windows (MSVC)
- path: ${{ env.BUILD_ARTIFACTSTAGINGDIRECTORY }}
- compression-level: 0
- if-no-files-found: error
-
- - name: Deploy master build to GitHub Releases
- if: |
- github.event_name != 'pull_request' &&
- github.repository == 'RPCS3/rpcs3' &&
- github.ref == 'refs/heads/master'
- env:
- RPCS3_TOKEN: ${{ secrets.RPCS3_TOKEN }}
- run: .ci/github-upload.sh
-
- - name: Show ccache stats
- if: github.ref == 'refs/heads/master'
- run: ccache --show-stats --verbose
-
- - name: Save Build Ccache
- if: github.ref == 'refs/heads/master'
- uses: actions/cache/save@main
- with:
- path: ${{ env.CCACHE_DIR }}
- key: ${{ steps.restore-build-ccache.outputs.cache-primary-key }}
-
- - name: Save Dependencies Cache
- if: github.ref == 'refs/heads/master'
- uses: actions/cache/save@main
- with:
- path: ${{ env.DEPS_CACHE_DIR }}
- key: ${{ steps.restore-dependencies-cache.outputs.cache-primary-key }}
-
Windows_Build_Clang:
# Only run push event on master branch of main repo, but run all PRs
needs: Clean_Code_Caches
diff --git a/buildfiles/msvc/rpcs3_default.props b/buildfiles/msvc/rpcs3_default.props
index c4f3cf248e..a7d830c5df 100644
--- a/buildfiles/msvc/rpcs3_default.props
+++ b/buildfiles/msvc/rpcs3_default.props
@@ -8,7 +8,7 @@
$(SolutionDir)build\lib\$(Configuration)-$(Platform)\;$(UniversalCRT_LibraryPath_x64);$(LibraryPath)
$(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\
$(SolutionDir)packages\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.1.8.1.8\build\native\Microsoft.googletest.v140.windesktop.msvcstl.static.rt-static.targets
- true
+ true
$(SolutionDir)3rdparty\opencv\opencv\opencv414\build
opencv_world4140
diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj
index 4e0276c3e4..214e90fcf5 100644
--- a/rpcs3/rpcs3.vcxproj
+++ b/rpcs3/rpcs3.vcxproj
@@ -24,7 +24,8 @@
release\
false
Unicode
- Application
+ Application
+ StaticLibrary
release\
rpcs3
@@ -32,7 +33,8 @@
debug\
false
Unicode
- Application
+ Application
+ StaticLibrary
debug\
rpcs3
@@ -50,20 +52,11 @@
- $(SolutionDir)bin\
- $(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\
+ $(SolutionDir)bin\
+ $(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\
rpcs3
- true
- $(SolutionDir)bin\
- $(SolutionDir)build\tmp\$(ProjectName)-$(Configuration)-$(Platform)\
rpcs3d
- true
-
-
- $(SolutionDir)3rdparty\7zip\7zip\C;$(SolutionDir)3rdparty\hidapi\hidapi\hidapi;.\;$(SolutionDir);$(SolutionDir)3rdparty\asmjit\asmjit\src;$(SolutionDir)3rdparty\yaml-cpp\yaml-cpp\include;$(SolutionDir)3rdparty\ffmpeg\include;$(VC_IncludePath);$(WindowsSDK_IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)3rdparty\libpng\libpng;$(SolutionDir)3rdparty\GL;$(SolutionDir)3rdparty\stblib\stb;$(SolutionDir)3rdparty\openal\openal-soft\include\AL;$(SolutionDir)3rdparty\pugixml\src;$(SolutionDir)3rdparty\Optional;$(SolutionDir)3rdparty\discord-rpc\discord-rpc\include;$(SolutionDir)3rdparty\zlib\zlib;$(SolutionDir)3rdparty\libsdl-org\SDL\include;$(SolutionDir)3rdparty\fusion\fusion\Fusion;$(SolutionDir)3rdparty\GPUOpen\VulkanMemoryAllocator\include
- $(SolutionDir)build\lib\$(Configuration)-$(Platform)\;$(UniversalCRT_LibraryPath_x64);$(LibraryPath)
-
-
+ true
$(SolutionDir)build\lib\$(Configuration)-$(Platform)\;$(UniversalCRT_LibraryPath_x64);$(LibraryPath)
$(SolutionDir)3rdparty\7zip\7zip\C;$(SolutionDir)3rdparty\hidapi\hidapi\hidapi;.\;$(SolutionDir);$(SolutionDir)3rdparty\asmjit\asmjit\src;$(SolutionDir)3rdparty\yaml-cpp\yaml-cpp\include;$(SolutionDir)3rdparty\ffmpeg\include;$(VC_IncludePath);$(WindowsSDK_IncludePath);$(UniversalCRT_IncludePath);$(SolutionDir)3rdparty\libpng\libpng;$(SolutionDir)3rdparty\GL;$(SolutionDir)3rdparty\stblib\stb;$(SolutionDir)3rdparty\openal\openal-soft\include\AL;$(SolutionDir)3rdparty\pugixml\src;$(SolutionDir)3rdparty\Optional;$(SolutionDir)3rdparty\discord-rpc\discord-rpc\include;$(SolutionDir)3rdparty\zlib\zlib;$(SolutionDir)3rdparty\libsdl-org\SDL\include;$(SolutionDir)3rdparty\fusion\fusion\Fusion;$(SolutionDir)3rdparty\GPUOpen\VulkanMemoryAllocator\include
@@ -87,9 +80,10 @@
TurnOffAllWarnings
+ true
$(OpenCvWorld).lib;DbgHelp.lib;Ole32.lib;gdi32.lib;hidapi.lib;libusb-1.0.lib;winmm.lib;miniupnpc_static.lib;rtmidi.lib;imm32.lib;ksuser.lib;version.lib;OpenAL32.lib;XAudio.lib;GLGSRender.lib;shlwapi.lib;VKGSRender.lib;vulkan-1.lib;wolfssl.lib;libcurl.lib;Wldap32.lib;glslang.lib;OSDependent.lib;SPIRV.lib;MachineIndependent.lib;GenericCodeGen.lib;Advapi32.lib;user32.lib;zlib.lib;zstd.lib;libpng16.lib;asmjit.lib;yaml-cpp.lib;discord-rpc.lib;emucore.lib;dxgi.lib;shell32.lib;Qt6Core.lib;Qt6Gui.lib;Qt6Widgets.lib;Qt6Concurrent.lib;Qt6Multimedia.lib;Qt6MultimediaWidgets.lib;Qt6Svg.lib;Qt6SvgWidgets.lib;7zip.lib;libcubeb.lib;cubeb.lib;soundtouch.lib;Avrt.lib;SDL.lib;fusion.lib;%(AdditionalDependencies)
$(OpenCvBuildDir)\x64\lib;$(SolutionDir)build\lib\$(Configuration)-$(Platform)\glslang;$(SolutionDir)build\lib_ext\$(CONFIGURATION)-$(PLATFORM);$(SolutionDir)build\lib\$(Configuration)-$(Platform)\protobuf_build\lib;$(QTDIR)\lib;$(VULKAN_SDK)\Lib;%(AdditionalLibraryDirectories)
- "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)
+ "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /d2:-cgthreads8 %(AdditionalOptions)
true
Debug
true
@@ -100,6 +94,9 @@
true
mainCRTStartup
+
+ $(SolutionDir)build\lib\$(Configuration)-$(Platform)\$(TargetName).lib
+
Unsigned
None
@@ -108,17 +105,13 @@
_WINDOWS;UNICODE;WIN32;WIN64;WITH_DISCORD_RPC;QT_UI;QT_NO_DEBUG;QT_WIDGETS_LIB;QT_GUI_LIB;QT_CORE_LIB;%(PreprocessorDefinitions)
-
+
$(QTDIR)\bin\windeployqt6 --no-compiler-runtime --no-opengl-sw --no-patchqt --no-quick --no-system-d3d-compiler --no-system-dxc-compiler --no-quick-import --plugindir "$(TargetDir)qt6\plugins" --translationdir "$(TargetDir)qt6\translations" --release "$(TargetPath)"
xcopy /y /d "$(OpenCvBuildDir)\x64\bin\$(OpenCvWorld).dll" "$(OutDir)"
-
-
-
-
-
+
@echo off
> "$(IntermediateOutputPath)obj_files.rsp" (
for /F "delims=" %%i in ('dir "$(IntermediateOutputPath)*.obj" /B ^| findstr /V /I "main.obj"') do (
@@ -147,9 +140,10 @@
$(IntDir)vc$(PlatformToolsetVersion).pdb
+ true
$(OpenCvWorld).lib;DbgHelp.lib;Ole32.lib;gdi32.lib;hidapi.lib;libusb-1.0.lib;winmm.lib;miniupnpc_static.lib;rtmidi.lib;imm32.lib;ksuser.lib;version.lib;OpenAL32.lib;XAudio.lib;GLGSRender.lib;shlwapi.lib;VKGSRender.lib;vulkan-1.lib;wolfssl.lib;libcurl-d.lib;Wldap32.lib;glslangd.lib;OSDependentd.lib;SPIRVd.lib;MachineIndependentd.lib;GenericCodeGend.lib;Advapi32.lib;user32.lib;zlib.lib;zstd.lib;libpng16.lib;asmjit.lib;yaml-cpp.lib;discord-rpc.lib;emucore.lib;dxgi.lib;shell32.lib;Qt6Cored.lib;Qt6Guid.lib;Qt6Widgetsd.lib;Qt6Concurrentd.lib;Qt6Multimediad.lib;Qt6MultimediaWidgetsd.lib;Qt6Svgd.lib;Qt6SvgWidgetsd.lib;7zip.lib;libcubeb.lib;cubeb.lib;soundtouch.lib;Avrt.lib;SDL.lib;fusion.lib;%(AdditionalDependencies)
$(OpenCvBuildDir)\x64\lib;$(SolutionDir)build\lib\$(Configuration)-$(Platform)\glslang;$(SolutionDir)build\lib\$(CONFIGURATION)-$(PLATFORM);$(SolutionDir)build\lib\$(Configuration)-$(Platform)\protobuf_build\lib;$(QTDIR)\lib;$(VULKAN_SDK)\Lib;%(AdditionalLibraryDirectories)
- "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /VERBOSE %(AdditionalOptions)
+ "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /VERBOSE /d2:-cgthreads8 %(AdditionalOptions)
true
Debug
true
@@ -159,6 +153,9 @@
true
mainCRTStartup
+
+ $(SolutionDir)build\lib\$(Configuration)-$(Platform)\$(TargetName).lib
+
Unsigned
None
@@ -167,17 +164,13 @@
_WINDOWS;UNICODE;WIN32;WIN64;QT_UI;QT_WIDGETS_LIB;QT_GUI_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions)
-
+
$(QTDIR)\bin\windeployqt6 --no-compiler-runtime --no-opengl-sw --no-patchqt --no-quick --no-system-d3d-compiler --no-system-dxc-compiler --no-quick-import --plugindir "$(TargetDir)qt6\plugins" --translationdir "$(TargetDir)qt6\translations" --debug "$(TargetPath)"
xcopy /y /d "$(OpenCvBuildDir)\x64\bin\$(OpenCvWorld).dll" "$(OutDir)"
-
-
-
-
-
+
@echo off
> "$(IntermediateOutputPath)obj_files.rsp" (
for /F "delims=" %%i in ('dir "$(IntermediateOutputPath)*.obj" /B ^| findstr /V /I "main.obj"') do (
@@ -206,7 +199,9 @@
-
+
+ true
+
diff --git a/rpcs3/tests/rpcs3_test.vcxproj b/rpcs3/tests/rpcs3_test.vcxproj
index a2623842b0..8488c1b9b1 100644
--- a/rpcs3/tests/rpcs3_test.vcxproj
+++ b/rpcs3/tests/rpcs3_test.vcxproj
@@ -10,9 +10,6 @@
x64
-
- false
-
{d1cbf84e-07f8-4acb-9cd2-bd205fdeee1e}
Application
@@ -40,6 +37,7 @@
+ true
false
X64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
Level3
@@ -48,12 +46,14 @@
$(IntDir)vc$(PlatformToolsetVersion).pdb
+ true
rpcs3.lib;$(OpenCvWorld).lib;DbgHelp.lib;Ole32.lib;gdi32.lib;hidapi.lib;libusb-1.0.lib;winmm.lib;miniupnpc_static.lib;rtmidi.lib;imm32.lib;ksuser.lib;version.lib;OpenAL32.lib;XAudio.lib;GLGSRender.lib;shlwapi.lib;VKGSRender.lib;vulkan-1.lib;wolfssl.lib;libcurl.lib;Wldap32.lib;glslang.lib;OSDependent.lib;SPIRV.lib;MachineIndependent.lib;GenericCodeGen.lib;Advapi32.lib;user32.lib;zlib.lib;zstd.lib;libpng16.lib;asmjit.lib;yaml-cpp.lib;discord-rpc.lib;emucore.lib;dxgi.lib;shell32.lib;Qt6Core.lib;Qt6Gui.lib;Qt6Widgets.lib;Qt6Concurrent.lib;Qt6Multimedia.lib;Qt6MultimediaWidgets.lib;Qt6Svg.lib;Qt6SvgWidgets.lib;7zip.lib;libcubeb.lib;cubeb.lib;soundtouch.lib;Avrt.lib;SDL.lib;fusion.lib;%(AdditionalDependencies)
$(OpenCvBuildDir)\x64\lib;$(SolutionDir)build\lib\$(Configuration)-$(Platform)\glslang;$(SolutionDir)build\lib_ext\$(CONFIGURATION)-$(PLATFORM);$(SolutionDir)build\lib\$(Configuration)-$(Platform)\protobuf_build\lib;$(QTDIR)\lib;$(VULKAN_SDK)\Lib;%(AdditionalLibraryDirectories)
+ /d2:-cgthreads8 %(AdditionalOptions)
Console
true
-
+
$(QTDIR)\bin\windeployqt6 --no-compiler-runtime --no-opengl-sw --no-patchqt --no-translations --no-quick --no-system-d3d-compiler --no-system-dxc-compiler --no-ffmpeg --no-quick-import --plugindir "$(TargetDir)qt6\plugins" --release "$(TargetPath)"
xcopy /y /d "$(OpenCvBuildDir)\x64\bin\$(OpenCvWorld).dll" "$(OutDir)"
@@ -62,6 +62,7 @@
+ true
Disabled
false
X64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
@@ -70,12 +71,14 @@
$(IntDir)vc$(PlatformToolsetVersion).pdb
+ true
rpcs3d.lib;$(OpenCvWorld).lib;DbgHelp.lib;Ole32.lib;gdi32.lib;hidapi.lib;libusb-1.0.lib;winmm.lib;miniupnpc_static.lib;rtmidi.lib;imm32.lib;ksuser.lib;version.lib;OpenAL32.lib;XAudio.lib;GLGSRender.lib;shlwapi.lib;VKGSRender.lib;vulkan-1.lib;wolfssl.lib;libcurl-d.lib;Wldap32.lib;glslangd.lib;OSDependentd.lib;SPIRVd.lib;MachineIndependentd.lib;GenericCodeGend.lib;Advapi32.lib;user32.lib;zlib.lib;zstd.lib;libpng16.lib;asmjit.lib;yaml-cpp.lib;discord-rpc.lib;emucore.lib;dxgi.lib;shell32.lib;Qt6Cored.lib;Qt6Guid.lib;Qt6Widgetsd.lib;Qt6Concurrentd.lib;Qt6Multimediad.lib;Qt6MultimediaWidgetsd.lib;Qt6Svgd.lib;Qt6SvgWidgetsd.lib;7zip.lib;libcubeb.lib;cubeb.lib;soundtouch.lib;Avrt.lib;SDL.lib;fusion.lib;%(AdditionalDependencies)
$(OpenCvBuildDir)\x64\lib;$(SolutionDir)build\lib\$(Configuration)-$(Platform)\glslang;$(SolutionDir)build\lib\$(CONFIGURATION)-$(PLATFORM);$(QTDIR)\lib;$(VULKAN_SDK)\Lib;%(AdditionalLibraryDirectories)
+ /d2:-cgthreads8 %(AdditionalOptions)
Console
true
-
+
$(QTDIR)\bin\windeployqt6 --no-compiler-runtime --no-opengl-sw --no-patchqt --no-translations --no-quick --no-system-d3d-compiler --no-system-dxc-compiler --no-ffmpeg --no-quick-import --plugindir "$(TargetDir)qt6\plugins" --release "$(TargetPath)"
xcopy /y /d "$(OpenCvBuildDir)\x64\bin\$(OpenCvWorld).dll" "$(OutDir)"