chore: update the file

This commit is contained in:
x-tools-author 2025-08-23 15:54:16 +08:00
parent 48c3fc26ce
commit 4a0ba8397c
4 changed files with 191 additions and 190 deletions

View File

@ -117,196 +117,6 @@ function(x_output_env flag)
message(STATUS "[${flag}]CMAKE_CURRENT_FUNCTION_LIST_DIR: ${CMAKE_CURRENT_FUNCTION_LIST_DIR}")
endfunction()
# --------------------------------------------------------------------------------------------------
# Generate translations files
# cmake-format: off
set(X_LANGUAGES "en" "zh_CN" "zh_TW" "ar" "cs" "da" "de" "es" "fa" "fi" "fr" "he" "uk" "it" "ja" "ko" "lt" "nl" "pl" "pt" "ru" "sk" "sl" "sv")
# cmake-format: on
# Generate translations files for module
function(x_generate_module_translations module_name dir recurse)
if(QT_VERSION VERSION_LESS "6.7.0")
return()
endif()
set(ts_files "")
foreach(lang IN LISTS X_LANGUAGES)
set(ts_file ${CMAKE_CURRENT_LIST_DIR}/res/translations/${module_name}/${module_name}_${lang}.ts)
list(APPEND ts_files ${ts_file})
endforeach()
if(recurse)
file(GLOB_RECURSE files ${dir}/*.h ${dir}/*.cpp ${dir}/*.ui)
else()
file(GLOB files ${dir}/*.h ${dir}/*.cpp ${dir}/*.ui)
endif()
qt_add_lupdate(TS_FILES ${ts_files} LUPDATE_TARGET ${module_name}_lupdate SOURCES ${files})
set(out_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/translations/${module_name}")
set_source_files_properties(${ts_files} PROPERTIES OUTPUT_LOCATION ${out_dir})
qt_add_lrelease(TS_FILES ${ts_files} LRELEASE_TARGET ${module_name}_lrelease)
set_property(TARGET ${module_name}_lupdate PROPERTY FOLDER "i18n")
set_property(TARGET ${module_name}_lrelease PROPERTY FOLDER "i18n")
set_property(TARGET update_translations PROPERTY FOLDER "i18n")
set_property(TARGET release_translations PROPERTY FOLDER "i18n")
endfunction()
# Use xTools translations
function(x_using_x_tools_translations target)
file(GLOB_RECURSE ts_files ${CMAKE_SOURCE_DIR}/res/translations/*.ts)
set(out_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/translations")
set_source_files_properties(${ts_files} PROPERTIES OUTPUT_LOCATION ${out_dir})
qt_add_lrelease(TS_FILES ${ts_files} LRELEASE_TARGET ${target}_lrelease)
set_property(TARGET release_translations PROPERTY FOLDER "i18n")
set_property(TARGET ${target}_lrelease PROPERTY FOLDER "i18n")
endfunction()
# Generate translations files for application
function(x_generate_translations target)
set(APP_TS_FILES "")
foreach(lang IN LISTS X_LANGUAGES)
set(ts_file ${CMAKE_CURRENT_LIST_DIR}/res/translations/${target}_${lang}.ts)
list(APPEND APP_TS_FILES ${ts_file})
endforeach()
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
if(QT_VERSION VERSION_LESS "6.2.0")
message(STATUS "[Linguist] Generating translations is ignored, because Qt version tool low")
return()
endif()
# cmake-format: off
if(NOT QT_VERSION VERSION_LESS "6.7.0")
qt_add_lupdate(SOURCE_TARGETS ${target} TS_FILES ${APP_TS_FILES} LUPDATE_TARGET ${target}_lupdate NO_GLOBAL_TARGET)
else()
qt_add_lupdate( TS_FILES ${APP_TS_FILES})
endif()
# cmake-format: on
# set(out_dir "$<TARGET_FILE_DIR:${target}>/translations")
set(out_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/translations")
set_source_files_properties(${APP_TS_FILES} PROPERTIES OUTPUT_LOCATION ${out_dir})
if(NOT QT_VERSION VERSION_LESS "6.7.0")
qt_add_lrelease(TS_FILES ${APP_TS_FILES} LRELEASE_TARGET ${target}_lrelease NO_GLOBAL_TARGET)
else()
qt_add_lrelease(${target} TS_FILES ${APP_TS_FILES})
endif()
else()
# cmake-format: off
qt5_add_translation(QM_FILES ${APP_TS_FILES})
qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${APP_TS_FILES})
# cmake-format: on
endif()
add_custom_target(
${target}_lupgrade
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${out_dir}/${target}_en.qm
${CMAKE_CURRENT_LIST_DIR}/res/translations/${target}_en.qm
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${out_dir}/${target}_zh_CN.qm
${CMAKE_CURRENT_LIST_DIR}/res/translations/${target}_zh_CN.qm
DEPENDS ${target}_lrelease
COMMENT "Generate translations for ${target}...")
endfunction()
# --------------------------------------------------------------------------------------------------
# Deploy Qt for Windows
function(x_deploy_qt_for_windows target)
get_target_property(QT_TARGET_TYPE Qt${QT_VERSION_MAJOR}::Core TYPE)
if(QT_TARGET_TYPE STREQUAL "STATIC_LIBRARY")
return()
endif()
if(NOT DEFINED WINDEPLOYQT_EXECUTABLE)
set(WINDEPLOYQT_EXECUTABLE "${QT_DIR}/../../../bin/windeployqt.exe")
endif()
if(NOT EXISTS ${WINDEPLOYQT_EXECUTABLE})
return()
endif()
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/qml)
add_custom_command(
TARGET ${target}
POST_BUILD
COMMAND ${WINDEPLOYQT_EXECUTABLE} $<TARGET_FILE:${target}> --no-compiler-runtime --qmldir
"${CMAKE_CURRENT_LIST_DIR}/qml"
COMMENT "Deploy Qt for Windows..."
VERBATIM)
else()
add_custom_command(
TARGET ${target}
POST_BUILD
COMMAND ${WINDEPLOYQT_EXECUTABLE} $<TARGET_FILE:${target}> --no-compiler-runtime
COMMENT "Deploy Qt for Windows..."
VERBATIM)
endif()
if(MSVC AND NOT ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug"))
cmake_path(GET CMAKE_CXX_COMPILER PARENT_PATH COMPILER_PATH)
# add '-' to ignore error if the file does not exist
add_custom_command(
TARGET ${target}
POST_BUILD VERBATIM
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${COMPILER_PATH}/vcruntime140.dll"
$<TARGET_FILE_DIR:${target}> "||" ${CMAKE_COMMAND} -E true
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${COMPILER_PATH}/vcruntime140_1.dll"
$<TARGET_FILE_DIR:${target}> "||" ${CMAKE_COMMAND} -E true
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${COMPILER_PATH}/msvcp140.dll"
$<TARGET_FILE_DIR:${target}> "||" ${CMAKE_COMMAND} -E true
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${COMPILER_PATH}/msvcp140_1.dll"
$<TARGET_FILE_DIR:${target}> "||" ${CMAKE_COMMAND} -E true
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${COMPILER_PATH}/msvcp140_2.dll"
$<TARGET_FILE_DIR:${target}> "||" ${CMAKE_COMMAND} -E true)
if(EXISTS "${QT_DIR}/../../../bin/libcrypto-3-x64.dll")
add_custom_command(
TARGET ${target}
POST_BUILD VERBATIM
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${QT_DIR}/../../../bin/libcrypto-3-x64.dll"
$<TARGET_FILE_DIR:${target}>)
endif()
if(EXISTS "${QT_DIR}/../../../bin/libssl-3-x64.dll")
add_custom_command(
TARGET ${target}
POST_BUILD VERBATIM
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${QT_DIR}/../../../bin/libssl-3-x64.dll"
$<TARGET_FILE_DIR:${target}>)
endif()
endif()
endfunction()
# --------------------------------------------------------------------------------------------------
# Deploy Qt for macOS
function(x_deploy_qt_for_mac target)
if(NOT DEFINED MACDEPLOYQT_EXECUTABLE)
return()
endif()
message(STATUS "Target path of macOS is: $<TARGET_FILE_DIR:${target}>")
add_custom_command(
TARGET ${target}
POST_BUILD
COMMAND ${MACDEPLOYQT_EXECUTABLE} "${target}.app"
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
COMMENT "Making dmg...")
endfunction()
# --------------------------------------------------------------------------------------------------
# Deploy Qt for linux
function(x_deploy_qt_for_linux target)
# Do nothing...
endfunction()
# --------------------------------------------------------------------------------------------------
# Deploy Qt
function(x_deploy_qt target)
if(WIN32)
x_deploy_qt_for_windows(${target})
elseif(APPLE)
x_deploy_qt_for_mac(${target})
elseif(UNIX)
x_deploy_qt_for_linux(${target})
endif()
endfunction()
# --------------------------------------------------------------------------------------------------
# 3rd party libraries(Using cmake for project management)
function(x_setup_3rd_library zip_url package_name)

View File

@ -1,3 +1,6 @@
include(${CMAKE_SOURCE_DIR}/cmake/x_qt_deploy.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/x_qt_linguist.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/x_qt_charts.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/x_qt_serialbus.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/x_qt_serialport.cmake)

99
cmake/x_qt_deploy.cmake Normal file
View File

@ -0,0 +1,99 @@
# --------------------------------------------------------------------------------------------------
# Deploy Qt for Windows
function(x_deploy_qt_for_windows target)
get_target_property(QT_TARGET_TYPE Qt${QT_VERSION_MAJOR}::Core TYPE)
if(QT_TARGET_TYPE STREQUAL "STATIC_LIBRARY")
return()
endif()
if(NOT DEFINED WINDEPLOYQT_EXECUTABLE)
set(WINDEPLOYQT_EXECUTABLE "${QT_DIR}/../../../bin/windeployqt.exe")
endif()
if(NOT EXISTS ${WINDEPLOYQT_EXECUTABLE})
return()
endif()
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/qml)
add_custom_command(
TARGET ${target}
POST_BUILD
COMMAND ${WINDEPLOYQT_EXECUTABLE} $<TARGET_FILE:${target}> --no-compiler-runtime --qmldir
"${CMAKE_CURRENT_LIST_DIR}/qml"
COMMENT "Deploy Qt for Windows..."
VERBATIM)
else()
add_custom_command(
TARGET ${target}
POST_BUILD
COMMAND ${WINDEPLOYQT_EXECUTABLE} $<TARGET_FILE:${target}> --no-compiler-runtime
COMMENT "Deploy Qt for Windows..."
VERBATIM)
endif()
if(MSVC AND NOT ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug"))
cmake_path(GET CMAKE_CXX_COMPILER PARENT_PATH COMPILER_PATH)
# add '-' to ignore error if the file does not exist
add_custom_command(
TARGET ${target}
POST_BUILD VERBATIM
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${COMPILER_PATH}/vcruntime140.dll"
$<TARGET_FILE_DIR:${target}> "||" ${CMAKE_COMMAND} -E true
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${COMPILER_PATH}/vcruntime140_1.dll"
$<TARGET_FILE_DIR:${target}> "||" ${CMAKE_COMMAND} -E true
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${COMPILER_PATH}/msvcp140.dll"
$<TARGET_FILE_DIR:${target}> "||" ${CMAKE_COMMAND} -E true
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${COMPILER_PATH}/msvcp140_1.dll"
$<TARGET_FILE_DIR:${target}> "||" ${CMAKE_COMMAND} -E true
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${COMPILER_PATH}/msvcp140_2.dll"
$<TARGET_FILE_DIR:${target}> "||" ${CMAKE_COMMAND} -E true)
if(EXISTS "${QT_DIR}/../../../bin/libcrypto-3-x64.dll")
add_custom_command(
TARGET ${target}
POST_BUILD VERBATIM
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${QT_DIR}/../../../bin/libcrypto-3-x64.dll"
$<TARGET_FILE_DIR:${target}>)
endif()
if(EXISTS "${QT_DIR}/../../../bin/libssl-3-x64.dll")
add_custom_command(
TARGET ${target}
POST_BUILD VERBATIM
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${QT_DIR}/../../../bin/libssl-3-x64.dll"
$<TARGET_FILE_DIR:${target}>)
endif()
endif()
endfunction()
# --------------------------------------------------------------------------------------------------
# Deploy Qt for macOS
function(x_deploy_qt_for_mac target)
if(NOT DEFINED MACDEPLOYQT_EXECUTABLE)
return()
endif()
message(STATUS "Target path of macOS is: $<TARGET_FILE_DIR:${target}>")
add_custom_command(
TARGET ${target}
POST_BUILD
COMMAND ${MACDEPLOYQT_EXECUTABLE} "${target}.app"
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
COMMENT "Making dmg...")
endfunction()
# --------------------------------------------------------------------------------------------------
# Deploy Qt for linux
function(x_deploy_qt_for_linux target)
# Do nothing...
endfunction()
# --------------------------------------------------------------------------------------------------
# Deploy Qt
function(x_deploy_qt target)
if(WIN32)
x_deploy_qt_for_windows(${target})
elseif(APPLE)
x_deploy_qt_for_mac(${target})
elseif(UNIX)
x_deploy_qt_for_linux(${target})
endif()
endfunction()

89
cmake/x_qt_linguist.cmake Normal file
View File

@ -0,0 +1,89 @@
# --------------------------------------------------------------------------------------------------
# Generate translations files
# cmake-format: off
set(X_LANGUAGES "en" "zh_CN" "zh_TW" "ar" "cs" "da" "de" "es" "fa" "fi" "fr" "he" "uk" "it" "ja" "ko" "lt" "nl" "pl" "pt" "ru" "sk" "sl" "sv")
# cmake-format: on
# Generate translations files for module
function(x_generate_module_translations module_name dir recurse)
if(QT_VERSION VERSION_LESS "6.7.0")
return()
endif()
set(ts_files "")
foreach(lang IN LISTS X_LANGUAGES)
set(ts_file ${CMAKE_CURRENT_LIST_DIR}/res/translations/${module_name}/${module_name}_${lang}.ts)
list(APPEND ts_files ${ts_file})
endforeach()
if(recurse)
file(GLOB_RECURSE files ${dir}/*.h ${dir}/*.cpp ${dir}/*.ui)
else()
file(GLOB files ${dir}/*.h ${dir}/*.cpp ${dir}/*.ui)
endif()
qt_add_lupdate(TS_FILES ${ts_files} LUPDATE_TARGET ${module_name}_lupdate SOURCES ${files})
set(out_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/translations/${module_name}")
set_source_files_properties(${ts_files} PROPERTIES OUTPUT_LOCATION ${out_dir})
qt_add_lrelease(TS_FILES ${ts_files} LRELEASE_TARGET ${module_name}_lrelease)
set_property(TARGET ${module_name}_lupdate PROPERTY FOLDER "i18n")
set_property(TARGET ${module_name}_lrelease PROPERTY FOLDER "i18n")
set_property(TARGET update_translations PROPERTY FOLDER "i18n")
set_property(TARGET release_translations PROPERTY FOLDER "i18n")
endfunction()
# Use xTools translations
function(x_using_x_tools_translations target)
file(GLOB_RECURSE ts_files ${CMAKE_SOURCE_DIR}/res/translations/*.ts)
set(out_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/translations")
set_source_files_properties(${ts_files} PROPERTIES OUTPUT_LOCATION ${out_dir})
qt_add_lrelease(TS_FILES ${ts_files} LRELEASE_TARGET ${target}_lrelease)
set_property(TARGET release_translations PROPERTY FOLDER "i18n")
set_property(TARGET ${target}_lrelease PROPERTY FOLDER "i18n")
endfunction()
# Generate translations files for application
function(x_generate_translations target)
set(APP_TS_FILES "")
foreach(lang IN LISTS X_LANGUAGES)
set(ts_file ${CMAKE_CURRENT_LIST_DIR}/res/translations/${target}_${lang}.ts)
list(APPEND APP_TS_FILES ${ts_file})
endforeach()
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
if(QT_VERSION VERSION_LESS "6.2.0")
message(STATUS "[Linguist] Generating translations is ignored, because Qt version tool low")
return()
endif()
# cmake-format: off
if(NOT QT_VERSION VERSION_LESS "6.7.0")
qt_add_lupdate(SOURCE_TARGETS ${target} TS_FILES ${APP_TS_FILES} LUPDATE_TARGET ${target}_lupdate NO_GLOBAL_TARGET)
else()
qt_add_lupdate( TS_FILES ${APP_TS_FILES})
endif()
# cmake-format: on
# set(out_dir "$<TARGET_FILE_DIR:${target}>/translations")
set(out_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/translations")
set_source_files_properties(${APP_TS_FILES} PROPERTIES OUTPUT_LOCATION ${out_dir})
if(NOT QT_VERSION VERSION_LESS "6.7.0")
qt_add_lrelease(TS_FILES ${APP_TS_FILES} LRELEASE_TARGET ${target}_lrelease NO_GLOBAL_TARGET)
else()
qt_add_lrelease(${target} TS_FILES ${APP_TS_FILES})
endif()
else()
# cmake-format: off
qt5_add_translation(QM_FILES ${APP_TS_FILES})
qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${APP_TS_FILES})
# cmake-format: on
endif()
add_custom_target(
${target}_lupgrade
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${out_dir}/${target}_en.qm
${CMAKE_CURRENT_LIST_DIR}/res/translations/${target}_en.qm
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${out_dir}/${target}_zh_CN.qm
${CMAKE_CURRENT_LIST_DIR}/res/translations/${target}_zh_CN.qm
DEPENDS ${target}_lrelease
COMMENT "Generate translations for ${target}...")
endfunction()