cmake_minimum_required(VERSION 3.16) project(ARC LANGUAGES CXX) #mkdir build #cd build #cmake .. -A x64 -DCMAKE_PREFIX_PATH="C:/Qt/6.9.0/msvc2022_64" -DCMAKE_BUILD_TYPE=Release #cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_PREFIX_PATH="C:/Qt/6.9.0/msvc2022_64" -DCMAKE_BUILD_TYPE=Release #cmake --build . --config Release #"C:\Qt\6.9.0\msvc2022_64\bin\windeployqt.exe" .\Release\ARC.exe set(CMAKE_CXX_STANDARD 17) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) add_compile_definitions(QT_MESSAGELOGCONTEXT) if (WIN32) # Определяем целевую архитектуру. # CMAKE_GENERATOR_PLATFORM (-A flag) — самый надёжный способ определения при кросс-компиляции. # На ARM64 хосте CMAKE_SYSTEM_PROCESSOR может быть "ARM64" даже при сборке под x64, # поэтому сначала проверяем явные x64-признаки. if (CMAKE_GENERATOR_PLATFORM STREQUAL "x64" OR CMAKE_GENERATOR_PLATFORM STREQUAL "Win64" OR VCPKG_TARGET_TRIPLET MATCHES "x64") message(STATUS "Detected x64 target architecture") set(CMAKE_PREFIX_PATH "C:/Qt/6.9.0/msvc2022_64") list(APPEND CMAKE_PREFIX_PATH "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows") set(Tesseract_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows/share/tesseract") elseif (VCPKG_TARGET_TRIPLET MATCHES "arm64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64" OR CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64" OR CMAKE_CXX_COMPILER MATCHES "arm64") message(STATUS "Detected ARM64 target architecture") set(CMAKE_PREFIX_PATH "C:/Qt/6.9.0/msvc2022_arm64") list(APPEND CMAKE_PREFIX_PATH "C:/Users/User/.vcpkg-clion/vcpkg/installed/arm64-windows") set(Tesseract_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/arm64-windows/share/tesseract") else () message(STATUS "Detected x64 target architecture (default)") set(CMAKE_PREFIX_PATH "C:/Qt/6.9.0/msvc2022_64") list(APPEND CMAKE_PREFIX_PATH "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows") set(Tesseract_DIR "C:/Users/User/.vcpkg-clion/vcpkg/installed/x64-windows/share/tesseract") endif () find_package(Tesseract CONFIG REQUIRED) elseif (APPLE) # Укажи путь к Qt6 set(CMAKE_PREFIX_PATH "/opt/homebrew/opt/qt") include_directories("/opt/homebrew/include") link_directories("/opt/homebrew/lib") endif () find_package(Qt6 REQUIRED COMPONENTS Network Widgets Sql Xml ) file(GLOB_RECURSE DB_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/database/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/database/*.h" ) file(GLOB_RECURSE VIEW_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/views/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/views/*.h" ) file(GLOB_RECURSE SERVICES_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/services/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/services/*.h" ) file(GLOB_RECURSE MODELS_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/models/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/models/*.h" ) file(GLOB_RECURSE ANDROID_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/android/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/android/*.h" ) if (WIN32) add_executable(ARC WIN32 main.cpp app.rc ${VIEW_SOURCES} ${SERVICES_SOURCES} ${DB_SOURCES} ${MODELS_SOURCES} ${ANDROID_SOURCES} views/bank/BankSettingsWindow.cpp views/bank/BankSettingsWindow.h views/log/FileLogWindow.cpp views/log/FileLogWindow.h database/dao/GeneralLogDAO.cpp database/dao/GeneralLogDAO.h ) elseif (APPLE) add_executable(ARC main.cpp ${VIEW_SOURCES} ${SERVICES_SOURCES} ${DB_SOURCES} ${MODELS_SOURCES} ${ANDROID_SOURCES} views/bank/BankSettingsWindow.cpp views/bank/BankSettingsWindow.h views/log/FileLogWindow.cpp views/log/FileLogWindow.h database/dao/GeneralLogDAO.cpp database/dao/GeneralLogDAO.h ) endif () if (WIN32) target_link_libraries(ARC Qt6::Widgets Qt6::Xml Qt6::Sql Qt6::Network Tesseract::libtesseract ) # Копирование изображений в директорию сборки # file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/database/app_data.db" DESTINATION "${CMAKE_BINARY_DIR}/database") file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tutorials" DESTINATION "${CMAKE_BINARY_DIR}") file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/images" DESTINATION "${CMAKE_BINARY_DIR}") file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/rus.traineddata" DESTINATION "${CMAKE_BINARY_DIR}") file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/eng.traineddata" DESTINATION "${CMAKE_BINARY_DIR}") file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/config.ini" DESTINATION "${CMAKE_BINARY_DIR}") file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/no_devices.png" DESTINATION "${CMAKE_BINARY_DIR}") file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/tools/adb/windows" DESTINATION "${CMAKE_BINARY_DIR}/tools/adb") add_custom_command(TARGET ARC POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "$/database" COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/tutorials" "$/tutorials" COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/images" "$/images" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/rus.traineddata" "$/rus.traineddata" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/eng.traineddata" "$/eng.traineddata" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/config.ini" "$/config.ini" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/no_devices.png" "$/no_devices.png" COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/tools/adb/windows" "$/tools/adb/windows" ) elseif (APPLE) target_link_libraries(ARC Qt6::Widgets Qt6::Sql Qt6::Xml Qt6::Network tesseract leptonica ) endif () target_include_directories(ARC PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/views ${CMAKE_CURRENT_SOURCE_DIR}/database ${CMAKE_CURRENT_SOURCE_DIR}/services ${CMAKE_CURRENT_SOURCE_DIR}/models ${CMAKE_CURRENT_SOURCE_DIR}/android )