diff --git a/.github/workflows/build-qv2ray-cmake.yml b/.github/workflows/build-qv2ray-cmake.yml index e78dadd9..564ef149 100644 --- a/.github/workflows/build-qv2ray-cmake.yml +++ b/.github/workflows/build-qv2ray-cmake.yml @@ -117,8 +117,9 @@ jobs: run: | mkdir build cd build - cmake .. -GNinja + cmake .. -GNinja -DCMAKE_INSTALL_PREFIX=./deployment cmake --build . --parallel $(nproc) + cmake --install . # -------------------------------------------------------- - name: Linux - ${{ matrix.qt_version }} - Generate Dependencies and Build if: matrix.platform == 'ubuntu-16.04' @@ -204,14 +205,13 @@ jobs: run: | set VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\ cd build - cd release - del *.cpp *.h *.o *.qrc *.qm *.hpp *.obj + cd deployment windeployqt ./qv2ray.exe --compiler-runtime --verbose 2 - name: Win-${{ matrix.arch }} - ${{ matrix.qt_version }} - Create 7z Release if: matrix.platform == 'windows-latest' uses: DuckSoft/create-7z-action@v1.0 with: - pathSource: ./build/release/ + pathSource: ./build/deployment/ pathTarget: ./release.7z - name: Win-${{ matrix.arch }} - ${{ matrix.qt_version }} - Uploading artifact if: matrix.platform == 'windows-latest' diff --git a/CMakeLists.txt b/CMakeLists.txt index cd4b27a5..93b35442 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -198,7 +198,7 @@ if(APPLE) include(cmake/macdeploy.cmake) endif() -if(UNIX AND NOT APPLE) +if(UNIX AND NOT APPLE AND NOT WIN32) install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin @@ -214,9 +214,7 @@ if(UNIX AND NOT APPLE) install(FILES assets/icons/qv2ray.png DESTINATION share/icons/hicolor/256x256/apps/ ) -endif() -if(UNIX AND NOT WIN32) install(FILES ${QM_FILES} DESTINATION share/qv2ray/lang ) @@ -224,4 +222,36 @@ endif() if(WIN32) target_link_libraries(${PROJECT_NAME} wininet wsock32 ws2_32 user32) + install(TARGETS ${PROJECT_NAME} + RUNTIME + DESTINATION . + ) + install(FILES ${QM_FILES} + DESTINATION lang + ) + + set(prefix "${PROJECT_NAME}.exe") + set(APPS "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${prefix}") + + # Directories to look for dependencies + set(DIRS "${CMAKE_BINARY_DIR}") + # Path used for searching by FIND_XXX(), with appropriate suffixes added + if(CMAKE_PREFIX_PATH) + foreach(dir ${CMAKE_PREFIX_PATH}) + list(APPEND DIRS "${dir}/bin" "${dir}/lib") + endforeach() + endif() + + # Append Qt's lib folder which is two levels above Qt5Widgets_DIR + list(APPEND DIRS "${Qt5Widgets_DIR}/../..") + + include(InstallRequiredSystemLibraries) + + message(STATUS "APPS: ${APPS}") + message(STATUS "QT_PLUGINS: ${QT_PLUGINS}") + message(STATUS "DIRS: ${DIRS}") + + install(CODE "include(BundleUtilities) + fixup_bundle(\"${APPS}\" \"${QT_PLUGINS}\" \"${DIRS}\")") + endif()