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/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 ) 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} )