mirror of
https://github.com/xiaoyifang/goldendict-ng.git
synced 2024-11-24 00:14:06 +00:00
feat: add windeploy
CMake target
This commit is contained in:
parent
c251a8f93b
commit
ff8aa2ae42
|
@ -30,14 +30,10 @@ else ()
|
||||||
set(GOLDENDICT "goldendict-ng")
|
set(GOLDENDICT "goldendict-ng")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set(CMAKE_AUTOUIC ON)
|
|
||||||
set(CMAKE_AUTOMOC ON)
|
|
||||||
set(CMAKE_AUTORCC ON)
|
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
#### Importing Libraries
|
#### Qt
|
||||||
|
|
||||||
find_package(Qt6 REQUIRED COMPONENTS
|
find_package(Qt6 REQUIRED COMPONENTS
|
||||||
Concurrent
|
Concurrent
|
||||||
|
@ -51,7 +47,10 @@ find_package(Qt6 REQUIRED COMPONENTS
|
||||||
TextToSpeech
|
TextToSpeech
|
||||||
)
|
)
|
||||||
|
|
||||||
#### Compile time files and preprocessor flags
|
qt_standard_project_setup() # availiable after find_package(Qt6 .... Core
|
||||||
|
set(CMAKE_AUTORCC ON) # not included in the qt_standard_project_setup
|
||||||
|
|
||||||
|
#### Things required during configuration
|
||||||
|
|
||||||
block() # generate version.txt
|
block() # generate version.txt
|
||||||
string(TIMESTAMP build_time)
|
string(TIMESTAMP build_time)
|
||||||
|
@ -67,6 +66,12 @@ block() # generate version.txt
|
||||||
endif ()
|
endif ()
|
||||||
endblock()
|
endblock()
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
# Binaries output dir for windows. The default ${CMAKE_BINARY_DIR} is too messy, use subfolder instead
|
||||||
|
# So that we can directly use windeployqt inside the output folder and obtain a redistributable GD
|
||||||
|
set(GD_WIN_OUTPUT_DIR ${CMAKE_BINARY_DIR}/${GOLDENDICT})
|
||||||
|
endif ()
|
||||||
|
|
||||||
#### Sources Files
|
#### Sources Files
|
||||||
|
|
||||||
# auto discovery of ui files https://cmake.org/cmake/help/v3.26/prop_tgt/AUTOUIC_SEARCH_PATHS.html
|
# auto discovery of ui files https://cmake.org/cmake/help/v3.26/prop_tgt/AUTOUIC_SEARCH_PATHS.html
|
||||||
|
@ -81,18 +86,18 @@ if (APPLE)
|
||||||
file(GLOB_RECURSE MACOS_SOURCE_FILES CONFIGURE_DEPENDS src/macos/*.mm)
|
file(GLOB_RECURSE MACOS_SOURCE_FILES CONFIGURE_DEPENDS src/macos/*.mm)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
set(WINDOWS_ICON_RC icons/programicon.rc)
|
||||||
|
endif ()
|
||||||
|
|
||||||
set(QSINGLEAPP_SOURCE_FILES
|
set(QSINGLEAPP_SOURCE_FILES
|
||||||
thirdparty/qtsingleapplication/src/qtlocalpeer.cpp
|
thirdparty/qtsingleapplication/src/qtlocalpeer.cpp
|
||||||
thirdparty/qtsingleapplication/src/qtlocalpeer.h
|
thirdparty/qtsingleapplication/src/qtlocalpeer.h
|
||||||
thirdparty/qtsingleapplication/src/qtsingleapplication.cpp
|
thirdparty/qtsingleapplication/src/qtsingleapplication.cpp
|
||||||
thirdparty/qtsingleapplication/src/qtsingleapplication.h
|
thirdparty/qtsingleapplication/src/qtsingleapplication.h
|
||||||
)
|
)
|
||||||
|
|
||||||
if(WIN32)
|
qt_add_executable(${GOLDENDICT})
|
||||||
qt_add_executable(${GOLDENDICT} WIN32 MANUAL_FINALIZATION icons/programicon.rc)
|
|
||||||
else()
|
|
||||||
qt_add_executable(${GOLDENDICT} MANUAL_FINALIZATION)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_sources(${GOLDENDICT} PRIVATE
|
target_sources(${GOLDENDICT} PRIVATE
|
||||||
icons/flags.qrc
|
icons/flags.qrc
|
||||||
|
@ -101,7 +106,9 @@ target_sources(${GOLDENDICT} PRIVATE
|
||||||
src/stylesheets/css.qrc
|
src/stylesheets/css.qrc
|
||||||
${ALL_SOURCE_FILES}
|
${ALL_SOURCE_FILES}
|
||||||
${MACOS_SOURCE_FILES}
|
${MACOS_SOURCE_FILES}
|
||||||
${QSINGLEAPP_SOURCE_FILES})
|
${QSINGLEAPP_SOURCE_FILES}
|
||||||
|
${WINDOWS_ICON_RC}
|
||||||
|
)
|
||||||
|
|
||||||
if (NOT USE_SYSTEM_FMT)
|
if (NOT USE_SYSTEM_FMT)
|
||||||
target_sources(${GOLDENDICT} PRIVATE thirdparty/fmt/format.cc)
|
target_sources(${GOLDENDICT} PRIVATE thirdparty/fmt/format.cc)
|
||||||
|
@ -177,22 +184,20 @@ endif ()
|
||||||
|
|
||||||
#### add translations
|
#### add translations
|
||||||
|
|
||||||
install(TARGETS ${GOLDENDICT}
|
|
||||||
BUNDLE DESTINATION .
|
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/${GOLDENDICT})
|
|
||||||
|
|
||||||
# include all *ts files under locale
|
# include all *ts files under locale
|
||||||
file(GLOB TRANS_FILES "locale/*.ts")
|
file(GLOB TRANS_FILES "locale/*.ts")
|
||||||
|
|
||||||
# Put generated files to output dir's locale
|
if (WIN32)
|
||||||
set_source_files_properties(${TRANS_FILES}
|
# Put generated files to output dir's locale
|
||||||
PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/locale")
|
set_source_files_properties(${TRANS_FILES} PROPERTIES OUTPUT_LOCATION "${GD_WIN_OUTPUT_DIR}/locale")
|
||||||
|
else ()
|
||||||
|
set_source_files_properties(${TRANS_FILES} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/locale")
|
||||||
|
endif ()
|
||||||
# a wrapper over qt_add_lupdate and qt_add_lrelease
|
# a wrapper over qt_add_lupdate and qt_add_lrelease
|
||||||
qt_add_translations(${GOLDENDICT} TS_FILES ${TRANS_FILES}
|
qt_add_translations(${GOLDENDICT} TS_FILES ${TRANS_FILES}
|
||||||
QM_FILES_OUTPUT_VARIABLE qm_files)
|
QM_FILES_OUTPUT_VARIABLE qm_files)
|
||||||
|
|
||||||
#### installation
|
#### installation or assemble redistribution
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
set_target_properties(${GOLDENDICT} PROPERTIES
|
set_target_properties(${GOLDENDICT} PROPERTIES
|
||||||
|
@ -204,6 +209,7 @@ if (APPLE)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (LINUX OR BSD)
|
if (LINUX OR BSD)
|
||||||
|
install(TARGETS ${GOLDENDICT})
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/redist/io.github.xiaoyifang.goldendict_ng.desktop DESTINATION share/applications)
|
install(FILES ${CMAKE_SOURCE_DIR}/redist/io.github.xiaoyifang.goldendict_ng.desktop DESTINATION share/applications)
|
||||||
install(FILES ${CMAKE_SOURCE_DIR}/redist/io.github.xiaoyifang.goldendict_ng.metainfo.xml DESTINATION share/metainfo)
|
install(FILES ${CMAKE_SOURCE_DIR}/redist/io.github.xiaoyifang.goldendict_ng.metainfo.xml DESTINATION share/metainfo)
|
||||||
|
|
||||||
|
@ -227,6 +233,25 @@ if (LINUX OR BSD)
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
qt_finalize_target(${GOLDENDICT})
|
if (WIN32)
|
||||||
|
set_target_properties(${GOLDENDICT}
|
||||||
|
PROPERTIES
|
||||||
|
WIN32_EXECUTABLE TRUE
|
||||||
|
RUNTIME_OUTPUT_DIRECTORY "${GD_WIN_OUTPUT_DIR}"
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${GD_WIN_OUTPUT_DIR}"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_custom_target(windeploy
|
||||||
|
COMMENT "Deploy everything to the output dir"
|
||||||
|
DEPENDS ${GOLDENDICT} # build this target will check if Goldendict.exe is already built
|
||||||
|
COMMAND windeployqt --no-quick-import "${GD_WIN_OUTPUT_DIR}/${GOLDENDICT}.exe" --plugindir "${GD_WIN_OUTPUT_DIR}/plugins"
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/opencc" "${GD_WIN_OUTPUT_DIR}/opencc"
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_SOURCE_DIR}/LICENSE.txt" "${GD_WIN_OUTPUT_DIR}/LICENSE.txt"
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E rm -f "${GD_WIN_OUTPUT_DIR}/goldendict.exe.manifest" "${GD_WIN_OUTPUT_DIR}/eb.dll.manifest"
|
||||||
|
WORKING_DIRECTORY ${GD_WIN_OUTPUT_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
#TODO: use CPack to make the output folder as NSIS installer
|
||||||
|
endif ()
|
||||||
|
|
||||||
feature_summary(WHAT ALL DESCRIPTION "Build configuration:")
|
feature_summary(WHAT ALL DESCRIPTION "Build configuration:")
|
||||||
|
|
|
@ -31,7 +31,7 @@ target_link_libraries(${GOLDENDICT} PRIVATE ${THIRD_PARTY_LIBARY})
|
||||||
file(GLOB DLL_FILES LIST_DIRECTORIES false "${CMAKE_SOURCE_DIR}/winlibs/lib/msvc/*.dll")
|
file(GLOB DLL_FILES LIST_DIRECTORIES false "${CMAKE_SOURCE_DIR}/winlibs/lib/msvc/*.dll")
|
||||||
foreach (A_DLL_FILE ${DLL_FILES})
|
foreach (A_DLL_FILE ${DLL_FILES})
|
||||||
get_filename_component(TEMP_VAR_HOLDING_DLL_FILENAME ${A_DLL_FILE} NAME)
|
get_filename_component(TEMP_VAR_HOLDING_DLL_FILENAME ${A_DLL_FILE} NAME)
|
||||||
configure_file("${A_DLL_FILE}" "${CMAKE_BINARY_DIR}/${TEMP_VAR_HOLDING_DLL_FILENAME}" COPYONLY)
|
configure_file("${A_DLL_FILE}" "${GD_WIN_OUTPUT_DIR}/${TEMP_VAR_HOLDING_DLL_FILENAME}" COPYONLY)
|
||||||
endforeach ()
|
endforeach ()
|
||||||
|
|
||||||
if (CMAKE_BUILD_TYPE MATCHES Debug)
|
if (CMAKE_BUILD_TYPE MATCHES Debug)
|
||||||
|
@ -41,7 +41,7 @@ else ()
|
||||||
endif ()
|
endif ()
|
||||||
foreach (A_DLL_FILE ${DLL_FILES})
|
foreach (A_DLL_FILE ${DLL_FILES})
|
||||||
get_filename_component(TEMP_VAR_HOLDING_DLL_FILENAME ${A_DLL_FILE} NAME)
|
get_filename_component(TEMP_VAR_HOLDING_DLL_FILENAME ${A_DLL_FILE} NAME)
|
||||||
configure_file("${A_DLL_FILE}" "${CMAKE_BINARY_DIR}/${TEMP_VAR_HOLDING_DLL_FILENAME}" COPYONLY)
|
configure_file("${A_DLL_FILE}" "${GD_WIN_OUTPUT_DIR}/${TEMP_VAR_HOLDING_DLL_FILENAME}" COPYONLY)
|
||||||
endforeach ()
|
endforeach ()
|
||||||
|
|
||||||
if (WITH_EPWING_SUPPORT)
|
if (WITH_EPWING_SUPPORT)
|
||||||
|
@ -51,5 +51,5 @@ if (WITH_EPWING_SUPPORT)
|
||||||
)
|
)
|
||||||
target_link_libraries(${GOLDENDICT} PRIVATE eb)
|
target_link_libraries(${GOLDENDICT} PRIVATE eb)
|
||||||
|
|
||||||
set_target_properties(eb PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
set_target_properties(eb PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${GD_WIN_OUTPUT_DIR})
|
||||||
endif ()
|
endif ()
|
||||||
|
|
|
@ -53,28 +53,30 @@ cmake --install ./build_dir/
|
||||||
|
|
||||||
Append `-D{flag_names}=ON/OFF` to cmake's config step
|
Append `-D{flag_names}=ON/OFF` to cmake's config step
|
||||||
|
|
||||||
Available flags:
|
Available flags can be found on the top of `CMakeLists.txt`
|
||||||
|
|
||||||
* `WITH_FFMPEG_PLAYER` "Enable support for FFMPEG player"
|
|
||||||
* `WITH_EPWING_SUPPORT` "Enable epwing support"
|
|
||||||
* `WITH_XAPIAN` "enable Xapian support"
|
|
||||||
* `WITH_ZIM` "enable zim support"
|
|
||||||
|
|
||||||
* `USE_SYSTEM_FMT` "use system fmt instead of bundled one"
|
|
||||||
* `USE_SYSTEM_TOML` "use system toml++ instead of bundled one"
|
|
||||||
|
|
||||||
### Windows
|
### Windows
|
||||||
|
|
||||||
Install Qt6(msvc) through the standard installer
|
Install Qt6(msvc) through the standard installer and pass Qt's path to CMake
|
||||||
|
|
||||||
Pass those parameters to cmake, the path should be changed to your actual installation paths
|
|
||||||
```
|
```
|
||||||
-DCMAKE_PREFIX_PATH=F:\Qt\6.4.1\msvc2019_64
|
-DCMAKE_PREFIX_PATH=F:\Qt\6.4.1\msvc2019_64
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The built artifacts will end up in `build_dir/goldendict`
|
||||||
|
|
||||||
|
To run the built `goldendict.exe` directly, you have to add `F:\Qt\6.5.2\msvc2019_64\bin` to your PATH environment variable
|
||||||
|
|
||||||
|
To have a redistributable goldendict (runable on someone else's computer by just copying the folder), you can build the deployment target which will copy necessary files to the folder
|
||||||
|
|
||||||
|
```
|
||||||
|
cmake --build . --target windeploy
|
||||||
|
```
|
||||||
|
|
||||||
|
The `build_dir/goldendict` will be ready to share with others.
|
||||||
|
|
||||||
Use`windeployqt.exe {your_build_dir}/goldendict.exe` which will copy the qt related `.dll` and other necessary files automatically.
|
Use`windeployqt.exe {your_build_dir}/goldendict.exe` which will copy the qt related `.dll` and other necessary files automatically.
|
||||||
|
|
||||||
Due to the `winlibs` are built on Release mode, there are troubles to build GoldenDict on Debug mode.
|
|
||||||
|
|
||||||
### macOS
|
### macOS
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue