cmake_minimum_required(VERSION 3.16) project(ViewDesignEngine VERSION 0.1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # ── 选项 ────────────────────────────────────────── option(BUILD_TESTS "Build unit tests" ON) option(BUILD_EXAMPLES "Build examples" ON) option(BUILD_BENCHMARKS "Build benchmarks" OFF) option(BUILD_SHARED_LIBS "Build shared library" OFF) option(ENABLE_SANITIZERS "Enable ASan/UBSan" OFF) option(ENABLE_LTO "Enable LTO" ON) # ── 编译设置 ────────────────────────────────────── include(cmake/CompilerSettings.cmake) # ── 依赖 ────────────────────────────────────────── find_package(Eigen3 3.3 QUIET) if(NOT Eigen3_FOUND) message(STATUS "Eigen3 not found — using FetchContent") include(FetchContent) FetchContent_Declare(Eigen3 URL https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz ) FetchContent_MakeAvailable(Eigen3) endif() # ── 子目录 ──────────────────────────────────────── add_subdirectory(src) # ── 测试 ────────────────────────────────────────── if(BUILD_TESTS) enable_testing() find_package(GTest QUIET) if(NOT GTest_FOUND) include(FetchContent) FetchContent_Declare(googletest URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.tar.gz ) set(INSTALL_GTEST OFF CACHE BOOL "" FORCE) FetchContent_MakeAvailable(googletest) endif() add_subdirectory(tests) endif() # ── 示例 ────────────────────────────────────────── # ── Python 绑定 ────────────────────────────────────option(VDE_BUILD_PYTHON "Build Python bindings (pybind11)" OFF)if(VDE_BUILD_PYTHON) add_subdirectory(python)endif() if(BUILD_EXAMPLES) add_subdirectory(examples) endif() # ── 性能测试 ────────────────────────────────────── if(BUILD_BENCHMARKS) find_package(benchmark QUIET) if(NOT benchmark_FOUND) include(FetchContent) FetchContent_Declare(googlebenchmark URL https://github.com/google/benchmark/archive/refs/tags/v1.8.0.tar.gz ) set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "" FORCE) FetchContent_MakeAvailable(googlebenchmark) endif() add_subdirectory(benchmarks) endif() # ── 安装 ────────────────────────────────────────── include(GNUInstallDirs) install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(TARGETS vde EXPORT ViewDesignEngine-targets) install(EXPORT ViewDesignEngine-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ViewDesignEngine)