# ============================================================
# 实验 1：图像读取与保存  -  CMake 构建配置文件
# ============================================================

# cmake_minimum_required: 指定构建此项目所需的最低 CMake 版本
# VERSION 3.10 是一个相对较老但足够稳定的版本（WSL Ubuntu 默认通常满足）
cmake_minimum_required(VERSION 3.10)

# project: 给你的项目起一个名字
# 这个名字会出现在生成的解决方案中，也方便你辨认
# 命名规则：exp + 实验编号 + 下划线 + 实验英文名
project(exp1_read_write)

# set(CMAKE_CXX_STANDARD 11): 指定使用 C++11 标准
# C++11 提供了 auto、范围 for 等现代特性，代码写起来更舒服
set(CMAKE_CXX_STANDARD 11)

# CMAKE_CXX_STANDARD_REQUIRED: 设为 ON 表示"必须"使用 C++11
# 如果编译器不支持 C++11，CMake 会直接报错，而不是偷偷降级
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# find_package: 寻找外部库，这里是寻找 OpenCV
# REQUIRED 表示 OpenCV 是必须的，找不到就报错并停止配置
# CMake 会自动查找 OpenCV 的头文件路径和库文件路径
find_package(OpenCV REQUIRED)

# add_executable: 告诉 CMake 我们要生成一个可执行文件
# 第一个参数 "exp1" 是可执行文件的名字（编译后运行 ./exp1）
# 第二个参数 "main.cpp" 是参与编译的源文件（可以有多个）
add_executable(exp1 main.cpp)

# target_link_libraries: 将 OpenCV 的库文件链接到我们的可执行文件上
# ${OpenCV_LIBS} 是 find_package(OpenCV) 自动填充的变量
# 它包含了 OpenCV 所有需要的 .so 库文件路径
# 不写这一行的话，编译时会出现"未定义引用"的链接错误
target_link_libraries(exp1 ${OpenCV_LIBS})

# include_directories: 将 OpenCV 的头文件目录添加到编译器的搜索路径中
# ${OpenCV_INCLUDE_DIRS} 也是 find_package 自动填充的
# 这样编译器才能找到 #include <opencv2/opencv.hpp> 这样的头文件
include_directories(${OpenCV_INCLUDE_DIRS})
