# 项目指令

## CMake 规则
- 禁止在任何 CMake 代码中使用 `cmake_parse_arguments`。
- 函数参数存在性检查、枚举值检查优先使用已有函数；没有合适函数时，创建新的小型专用函数。
- 优先使用显式位置参数，其他配置项优先通过 target 属性实现，避免依赖大量全局变量。。


## CMake 格式规范
- 禁止松散、无意义的空行， 代码保持紧凑。


## CMake 命名规范
- 项目自定义名称优先使用小写 `snake_case`。
- 名称必须表达明确用途，禁止使用无语义或含糊缩写。
- 项目自定义 `function()` 使用小写 `snake_case`。
- 公共函数必须带项目或模块前缀，例如 `sun_cat_add_library()`。
- 内部辅助函数以下划线开头，并带项目或模块前缀，例如 `_sun_cat_check_required_arg()`。
- 不要新增无前缀的全局函数。
- 局部变量使用小写 `snake_case`，例如 `target_name`、`source_files`、`include_dirs`。
- 布尔变量使用明确谓词形式，例如 `is_header_only`、`has_public_sources`、`enable_install`。
- 自定义 target 属性使用大写 `SNAKE_CASE`，并带项目或模块前缀，例如 `SUN_CAT_LIBRARY_KIND`。
- CMake 模块文件使用小写 `snake_case`，例如 `sun_cat_library.cmake`。
- 如果已有文件存在稳定命名风格，优先保持当前文件一致性；但不得违反本项目禁用规则。


## 组装脚本规范
- 组装脚本时候功能通常是模块化的 一半都是输出字符串函数  字符串脚本落盘函数 脚本封装成 add_custom_target 函数组装的add_custom_command函数
- 多层结构出现的，每层需要复用
- 当函数需要组装powershell脚本 cmd脚本时候，注意编码格式，windows系统是GBK，项目文件，全局都是utf8 with bom
- 注意有些古老工具 chcp 65001 并不能输出utf8编码，这是就要尽量考虑输出文件方案，规避乱码问题
