84 lines
3.5 KiB
CMake
84 lines
3.5 KiB
CMake
cmake_minimum_required(VERSION 3.21)
|
||
project(geopro_desktop LANGUAGES CXX)
|
||
|
||
# ---- Global C++ settings (规约 §3.2: C++17, 可渐进 C++20) ----
|
||
set(CMAKE_CXX_STANDARD 17)
|
||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||
|
||
# Qt 自动工具(仅 view/app 层需要 moc/uic/rcc)
|
||
set(CMAKE_AUTOMOC ON)
|
||
set(CMAKE_AUTORCC ON)
|
||
set(CMAKE_AUTOUIC ON)
|
||
|
||
if(MSVC)
|
||
add_compile_options(/utf-8 /MP /W4 /permissive-)
|
||
endif()
|
||
|
||
# =====================================================================
|
||
# 构建方案②-修订(设计 §11 / K-8 / docs/ENV_SETUP_Windows.md)
|
||
# - 单一 Qt = 官方 MSVC 预编译 Qt(CMAKE_PREFIX_PATH 指向 D:/Qt/6.11.1/msvc2022_64)
|
||
# - VTK: 预先用官方 Qt 源码编并 install 到 VTK_DIR(见 ENV_SETUP / Phase 0)
|
||
# - ADS / QtKeychain: 经 FetchContent 对接同一份官方 Qt(绝不走 vcpkg,避免双 Qt)
|
||
# - 仅非 Qt 依赖(GDAL/PROJ/OpenSSL/Eigen/...)走 vcpkg
|
||
# =====================================================================
|
||
|
||
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Network Sql Concurrent)
|
||
# VTK 9 必须指定 COMPONENTS,否则 VTK_LIBRARIES 为空、链接不到任何 VTK。
|
||
# 来自 VTK_DIR(external/vtk-install)。随渲染层增补模块(Volume/Filters 等)。
|
||
find_package(VTK REQUIRED COMPONENTS
|
||
GUISupportQt
|
||
RenderingOpenGL2
|
||
InteractionStyle
|
||
FiltersSources
|
||
)
|
||
|
||
# 非 Qt 依赖(vcpkg),随分层逐步启用:
|
||
# find_package(GDAL CONFIG REQUIRED)
|
||
# find_package(PROJ CONFIG REQUIRED)
|
||
# find_package(Eigen3 CONFIG REQUIRED)
|
||
# find_package(spdlog CONFIG REQUIRED)
|
||
# find_package(nlohmann_json CONFIG REQUIRED)
|
||
# find_package(OpenSSL REQUIRED)
|
||
|
||
# ADS(停靠):FetchContent 对接官方 Qt(spike S2)。QtKeychain 待登录层再加。
|
||
include(FetchContent)
|
||
set(ADS_VERSION 4.3.1 CACHE STRING "" FORCE)
|
||
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
||
set(BUILD_STATIC OFF CACHE BOOL "" FORCE)
|
||
FetchContent_Declare(ads
|
||
GIT_REPOSITORY https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git
|
||
GIT_TAG 4.3.1)
|
||
FetchContent_MakeAvailable(ads)
|
||
|
||
# QtKeychain(凭证安全存取,规约 §7.4:登录"记住一个月"免登录):FetchContent 对接官方 Qt。
|
||
# 必须指定 Qt6(默认走 Qt5 会找不到包);静态链接避免额外 DLL;关测试程序与翻译省依赖。
|
||
set(BUILD_WITH_QT6 ON CACHE BOOL "" FORCE)
|
||
set(BUILD_TEST_APPLICATION OFF CACHE BOOL "" FORCE)
|
||
set(BUILD_TRANSLATIONS OFF CACHE BOOL "" FORCE)
|
||
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
|
||
FetchContent_Declare(qtkeychain
|
||
GIT_REPOSITORY https://github.com/frankosterfeld/qtkeychain.git
|
||
GIT_TAG v0.14.0)
|
||
FetchContent_MakeAvailable(qtkeychain)
|
||
|
||
# 【ElaWidgetTools 评估 spike — 仅 feat/elawidgettools 分支】Fluent UI for QWidget。
|
||
# 用 RainbowCandyX fork(支持 Qt6.10+,对 6.11 有条件修补)。SOURCE_SUBDIR 仅编库子目录,
|
||
# 跳过其示例/PySide bindings。静态链接(MIT 许可,static 合规且省 DLL)。库子目录自带
|
||
# find_package(Qt6 Widgets/WidgetsPrivate) 与自身 .qrc(靠全局 AUTORCC)。仅隔离评估,不影响产品。
|
||
set(ELAWIDGETTOOLS_BUILD_STATIC_LIB ON CACHE BOOL "" FORCE)
|
||
FetchContent_Declare(elawidgettools
|
||
GIT_REPOSITORY https://github.com/RainbowCandyX/ElaWidgetTools.git
|
||
GIT_TAG main
|
||
SOURCE_SUBDIR ElaWidgetTools)
|
||
FetchContent_MakeAvailable(elawidgettools)
|
||
|
||
add_subdirectory(src)
|
||
|
||
# ElaWidgetTools 评估 spike(隔离 demo,不属于产品 geopro_desktop;评估完删分支即弃)。
|
||
add_subdirectory(spike/ela)
|
||
|
||
enable_testing()
|
||
add_subdirectory(tests)
|