Files
bishe-QT/CMakeLists.txt
2026-05-21 08:07:04 +08:00

166 lines
5.2 KiB
CMake

cmake_minimum_required(VERSION 3.16)
project(rewrite_qt VERSION 1.0.0 LANGUAGES CXX)
set(REWRITE_QT_DISPLAY_NAME "人脸识别考勤系统")
set(QT_QML_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/qml")
set(REWRITE_QT_OUTPUT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dist")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${REWRITE_QT_OUTPUT_DIR}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${REWRITE_QT_OUTPUT_DIR}")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${REWRITE_QT_OUTPUT_DIR}")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOMOC_COMPILER_PREDEFINES OFF)
set(CMAKE_AUTORCC ON)
file(TO_CMAKE_PATH "$ENV{LOCALAPPDATA}" REWRITE_QT_LOCALAPPDATA)
if(REWRITE_QT_LOCALAPPDATA)
set(REWRITE_QT_AUTOGEN_DIR "${REWRITE_QT_LOCALAPPDATA}/rewrite_qt_autogen")
else()
set(REWRITE_QT_AUTOGEN_DIR "${CMAKE_BINARY_DIR}/autogen_ascii")
endif()
file(MAKE_DIRECTORY "${REWRITE_QT_AUTOGEN_DIR}")
find_package(Qt6 6.2 REQUIRED COMPONENTS Core Gui Qml Quick QuickControls2 Network)
get_target_property(REWRITE_QT_QMAKE_EXECUTABLE Qt6::qmake IMPORTED_LOCATION)
if(REWRITE_QT_QMAKE_EXECUTABLE)
execute_process(
COMMAND "${REWRITE_QT_QMAKE_EXECUTABLE}" -query QT_INSTALL_QML
OUTPUT_VARIABLE REWRITE_QT_INSTALL_QML
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif()
qt_standard_project_setup()
set(REWRITE_QT_APP_ICON "${CMAKE_CURRENT_SOURCE_DIR}/assets/favicon.ico")
set(REWRITE_QT_ICON_RESOURCES
assets/favicon.ico
assets/favicon-256x256.png
assets/favicon-192x192.png
assets/favicon-128x128.png
assets/favicon-64x64.png
assets/favicon-48x48.png
assets/favicon-32x32.png
assets/favicon-16x16.png
)
qt_add_executable(apprewrite_qt
main.cpp
src/AppController.cpp
src/ApiClient.cpp
src/CryptoUtils.cpp
src/RecordListModel.cpp
src/StatisticsListModel.cpp
src/TimeSlotListModel.cpp
src/StudentProfileListModel.cpp
src/MappingListModel.cpp
src/FaceListModel.cpp
)
if(REWRITE_QT_INSTALL_QML)
target_compile_definitions(apprewrite_qt PRIVATE
REWRITE_QT_INSTALL_QML="${REWRITE_QT_INSTALL_QML}"
)
endif()
if(WIN32 AND EXISTS "${REWRITE_QT_APP_ICON}")
set(REWRITE_QT_WIN32_ICON_RC "${CMAKE_CURRENT_BINARY_DIR}/app_icon.rc")
configure_file(cmake/app_icon.rc.in "${REWRITE_QT_WIN32_ICON_RC}" @ONLY)
target_sources(apprewrite_qt PRIVATE "${REWRITE_QT_WIN32_ICON_RC}")
endif()
if(ANDROID)
set_target_properties(apprewrite_qt PROPERTIES
QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android"
QT_ANDROID_APP_NAME "${REWRITE_QT_DISPLAY_NAME}"
QT_ANDROID_APP_ICON "@mipmap/ic_launcher"
)
endif()
target_include_directories(apprewrite_qt PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
)
set(REWRITE_QT_RESOURCE_FILES
qml/Main.qml
)
foreach(REWRITE_QT_ICON_RESOURCE IN LISTS REWRITE_QT_ICON_RESOURCES)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${REWRITE_QT_ICON_RESOURCE}")
list(APPEND REWRITE_QT_RESOURCE_FILES "${REWRITE_QT_ICON_RESOURCE}")
endif()
endforeach()
qt_add_resources(apprewrite_qt "qml_resources"
PREFIX "/"
FILES
${REWRITE_QT_RESOURCE_FILES}
)
target_link_libraries(apprewrite_qt
PRIVATE
Qt6::Core
Qt6::Gui
Qt6::Qml
Qt6::Quick
Qt6::QuickControls2
Qt6::Network
)
set_target_properties(apprewrite_qt PROPERTIES
AUTOGEN_BUILD_DIR "${REWRITE_QT_AUTOGEN_DIR}"
QT_QML_MODULE_NO_IMPORT_SCAN TRUE
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
if(WIN32)
get_filename_component(REWRITE_QT_QT_BIN_DIR "${REWRITE_QT_QMAKE_EXECUTABLE}" DIRECTORY)
find_program(REWRITE_QT_WINDEPLOYQT_EXECUTABLE
NAMES windeployqt
HINTS "${REWRITE_QT_QT_BIN_DIR}"
REQUIRED
)
add_custom_command(TARGET apprewrite_qt POST_BUILD
COMMAND "${REWRITE_QT_WINDEPLOYQT_EXECUTABLE}"
--dir "$<TARGET_FILE_DIR:apprewrite_qt>"
--qmldir "${CMAKE_CURRENT_SOURCE_DIR}/qml"
--release
"$<TARGET_FILE:apprewrite_qt>"
COMMENT "Deploying Qt runtime dependencies with windeployqt"
COMMAND_EXPAND_LISTS
)
endif()
include(GNUInstallDirs)
if(UNIX AND NOT APPLE AND NOT ANDROID)
set(REWRITE_QT_DESKTOP_FILE "${CMAKE_CURRENT_BINARY_DIR}/rewrite_qt.desktop")
configure_file(cmake/rewrite_qt.desktop.in "${REWRITE_QT_DESKTOP_FILE}" @ONLY)
install(FILES "${REWRITE_QT_DESKTOP_FILE}"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications"
)
foreach(REWRITE_QT_ICON_SIZE IN ITEMS 16 32 48 64 128 192 256)
set(REWRITE_QT_LINUX_ICON "${CMAKE_CURRENT_SOURCE_DIR}/assets/favicon-${REWRITE_QT_ICON_SIZE}x${REWRITE_QT_ICON_SIZE}.png")
if(EXISTS "${REWRITE_QT_LINUX_ICON}")
install(FILES "${REWRITE_QT_LINUX_ICON}"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${REWRITE_QT_ICON_SIZE}x${REWRITE_QT_ICON_SIZE}/apps"
RENAME rewrite_qt.png
)
endif()
endforeach()
endif()
install(TARGETS apprewrite_qt
BUNDLE DESTINATION .
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)