# ==============================================================================
#  四川大学 C++/LinuxC  —  「02. Qt 方向」课程代码仓库
#
#  顶层项目管理。两个 part 相互独立、相对隔离：
#    * p01   —— C/C++ 强化（控制台程序，host gcc/g++ 即可构建）
#    * p03   —— Qt 桌面应用开发（需隔离的 Qt 5.14.2 工具链）
#
#  目录按「章节 + 话题」组织，采用深缩写：part 缩写 pNN（顶层不编号）/
#  章缩写 chNN / 节缩写 sNN。例如 p01/ch04/s03/ 。
#  每个可执行示例 = 一个独立 add_executable 目标，可单独
#  cmake --build build --target <name>  构建运行。
# ------------------------------------------------------------------------------
cmake_minimum_required(VERSION 3.16)
project(qt_course LANGUAGES C CXX)

# --- 标准：默认 C17 / C++17（任务 1 的基线），严格、不允许编译器扩展 -----------
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Debug CACHE STRING "" FORCE)
endif()

# 教学示例：警告要明显但不阻断（-Wall -Wextra 默认开，特定目标再额外收紧）
add_compile_options(-Wall -Wextra)

# 默认导出编译命令，便于编辑器/探针脚本复用
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

option(BUILD_QT_PART "Build the Qt desktop examples (needs isolated Qt 5.14.2)" OFF)

# --- Part 1: C/C++ 强化（host 构建） --------------------------------------------
add_subdirectory(p01)

# --- Part 3: Qt 桌面应用开发（仅当显式开启且找到隔离 Qt 时构建） ----------------
if(BUILD_QT_PART)
    # 找到的 Qt 版本必须严格隔离为 5.14.x；否则中止，避免误用系统 5.15。
    find_package(Qt5 COMPONENTS Core Widgets Gui REQUIRED)
    message(STATUS "Found Qt5 ${Qt5Core_VERSION_STRING} at ${Qt5Core_DIR}")
    if(NOT Qt5Core_VERSION_STRING MATCHES "^5\\.14\\.")
        message(FATAL_ERROR
            "Refusing to build Qt examples against Qt ${Qt5Core_VERSION_STRING}: "
            "this repo requires the ISOLATED Qt 5.14.x toolchain. "
            "Run tools/install_qt_host.sh, then pass -DCMAKE_PREFIX_PATH=/path/to/qt/5.14.2/gcc_64.")
    endif()
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTORCC ON)
    set(CMAKE_AUTOUIC ON)
    add_subdirectory(p03)

    # 教学补充示例（手工维护，非 tools/gen_part3.py 生成产物）：方案书课程要求
    # 但仓库 p03/ 的 wiki 抓取内容未覆盖的技术点（QSS/Model-View/JSON/QThread/
    # 动画/状态机），见 docs/teaching/examples/。
    add_subdirectory(docs/teaching/examples)
endif()
