cmake_minimum_required(VERSION 3.21) project(Flora VERSION 0.0.1 LANGUAGES C CXX) # Старые подпроекты (cmark-gfm) объявляют cmake_minimum_required < 3.5; # CMAKE 4.x иначе отказывается их конфигурировать. set(CMAKE_POLICY_VERSION_MINIMUM 3.5) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) # --- Тесты (объявляем до загрузки зависимостей: их CMake могут трогать BUILD_TESTING) --- set(BUILD_TESTING ON CACHE BOOL "Строить тесты" FORCE) include(CTest) # Десктоп: системный OpenSSL (для libssh2/libgit2 HTTPS/SSH). find_package(OpenSSL REQUIRED) message(STATUS "OpenSSL: ${OPENSSL_VERSION}") # Qt 6 find_package(Qt6 6.4 REQUIRED COMPONENTS Quick QuickControls2 QuickTemplates2 QuickLayouts Sql Network Pdf PrintSupport Svg) qt_standard_project_setup(REQUIRES 6.4) # Политики Qt: фиксируем поведение QML-модулей (qmldir, префикс ресурсов). qt_policy(SET QTP0001 NEW) qt_policy(SET QTP0004 NEW) # Отключаем AOT-компиляцию QML — гарантирует что QML-изменения подхватываются сразу. set(QML_COMPILER_ENABLE_AOT OFF) # Сторонние библиотеки как подпроекты (FetchContent). include(${CMAKE_CURRENT_SOURCE_DIR}/third_party/deps.cmake) set(FLORA_HEADERS src/app/VaultManager.h src/app/WindowController.h src/core/DocumentManager.h src/core/FileStore.h src/core/SettingsStore.h src/core/VaultIndex.h src/git/GitManager.h src/markdown/MdParser.h src/sync/SyncManager.h ) set(FLORA_SOURCES src/app/VaultManager.cpp src/app/WindowController.cpp src/core/DocumentManager.cpp src/core/FileStore.cpp src/core/SettingsStore.cpp src/core/VaultIndex.cpp src/git/GitManager.cpp src/markdown/MdParser.cpp src/sync/SyncManager.cpp ) # --- Ядро (C++ бэкенд) --- add_library(flora_core STATIC ${FLORA_HEADERS} ${FLORA_SOURCES} ) target_include_directories(flora_core PUBLIC src) target_compile_features(flora_core PUBLIC cxx_std_17) target_compile_definitions(flora_core PRIVATE CMARK_GFM_STATIC_DEFINE CMARK_GFM_EXTENSIONS_STATIC_DEFINE) target_link_libraries(flora_core PUBLIC Qt6::Quick Qt6::QuickControls2 Qt6::QuickTemplates2 Qt6::QuickLayouts Qt6::Sql Qt6::Network Qt6::Pdf Qt6::PrintSupport Qt6::Svg cmark::cmark ) if(TARGET cmark::cmark_extensions) target_link_libraries(flora_core PUBLIC cmark::cmark_extensions) endif() if(TARGET Flora_libgit2_static) target_link_libraries(flora_core PUBLIC Flora_libgit2_static) else() target_link_libraries(flora_core PUBLIC git2) endif() if(TARGET libssh2_static) target_link_libraries(flora_core PUBLIC libssh2_static) endif() if(TARGET KF6SyntaxHighlighting) target_link_libraries(flora_core PUBLIC KF6SyntaxHighlighting) endif() # --- Приложение (QML) --- qt_add_executable(flora src/main.cpp) set_target_properties(flora PROPERTIES MACOSX_BUNDLE TRUE MACOSX_BUNDLE_BUNDLE_NAME Flora MACOSX_BUNDLE_GUI_IDENTIFIER org.flora.app WIN32_EXECUTABLE TRUE ) target_link_libraries(flora PRIVATE flora_core) qt_add_qml_module(flora URI Flora VERSION 1.0 QML_FILES qml/MainWindow.qml qml/panels/FileTreePanel.qml qml/panels/EditorPanel.qml qml/panels/EditorPane.qml qml/panels/FormatToolbar.qml qml/panels/TbButton.qml qml/panels/RightPanel.qml qml/panels/TagChip.qml qml/panels/GraphView.qml qml/panels/MonthCalendar.qml qml/wizard/WelcomeWizard.qml qml/dialogs/ProviderSetupGuide.qml qml/dialogs/NameDialog.qml qml/dialogs/ConfirmDialog.qml qml/dialogs/TableEditor.qml ) # Theme как синглтон set_source_files_properties(qml/Theme.qml PROPERTIES QT_QML_SINGLETON_TYPE TRUE) qt_target_qml_sources(flora QML_FILES qml/Theme.qml ) # --- Тесты --- if(BUILD_TESTING) add_subdirectory(tests) endif()