# halcon **Repository Path**: ywlydd/halcon ## Basic Information - **Project Name**: halcon - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-11-01 - **Last Updated**: 2026-11-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 复刻 halcon ## 工程脚手架(配置驱动) 所有项目相关的构建参数都在 [`config.yaml`](config.yaml) 里,生成器 [`create_cpp_cmake_project.py`](create_cpp_cmake_project.py) 本身不含任何本工程的 名字/路径/库名。改配置 → 重跑 → 脚本自动更新: ```bash python create_cpp_cmake_project.py . # 用 ./config.yaml(缺省回退 config_demo.yaml) python create_cpp_cmake_project.py --init # 生成一份带注释的 config.yaml ``` `config.yaml` 覆盖的内容: | 段 | 说明 | |---|---| | `name` / `languages` / `cxx_standard` / `c_standard` / `output_dir` / `utf8` | 工程级参数 | | `compilers.mingw64.bin` | gcc/g++/gdb 所在目录(bat 与 .vscode 都用它) | | `compilers.msvc.dir` / `sdk` / `vs_instances` | MSVC 工具集与 Windows SDK;`dir` 留空则自动探测 | | `paths.include` / `paths.lib` / `paths.link` | 第三方头文件、库目录、链接库(原先的 include_paths.txt / lib_paths.txt / link_libs.txt 已迁入) | | `build.dirs` | 六个构建目录名,构建脚本与清理脚本共用 | | `target` | 目标列表:`exe` / `dll` / `lib` / `test` / `subdir`,各自 sources、include、libs、defines | | `extra_cmake` | 项目特有的构建逻辑(本工程是 `cmake/libhalcon_exports.cmake`,def 自动生成) | | `clean.*` | clear.bat 的清理规则(保留目录、待删目录、抢救扩展名与大小上限) | 生成物:`CMakeLists.txt`(已存在则跳过,当前仓库是手写版)、`build.ps1`、 `build_MinGW.bat`、`build_vs.bat`、`build_gcc.sh`、`clear.bat`、`clear_all.bat`、 `tools/clean_project.py`、`tools/clean_config.json`、`.vscode/*.json`。 ## 构建 ```bash build_MinGW.bat [Release] # MinGW,输出 build/ 或 build_rel/ build_vs.bat [Release] # MSVC(NMake),输出 build_vs/ 或 build_vs_rel/ ./build_gcc.sh [Release] # Linux/WSL GCC ctest --test-dir build # 单元测试(含 ut_base_diff:本库 vs 真 HALCON 逐行比对) ``` ## 清理 ```bash clear.bat # 先抢救临时目录里的脚本到 _rescue/<时间戳>/,再删除 clear.bat --dry-run # 只看计划 clear.bat --quick # 只删构建目录 clear.bat --show-rules # 打印生效的清理规则 ``` ## C 代码约定(`src/`) - **错误码**:一律用 `src/halcon_errcode_priv.h` 的 `HEC_*` 枚举。枚举值直接引用原厂 `include/HErrorDef.h` 的 `H_ERR_*` 宏,值只有一份来源;代码里不再出现 `return 1302;` 这种裸数字。模块内的旧别名(`OPE_*` / `OCX_E_*` / `SYS_E_*`)也改成指向 `HEC_*` 的枚举。 - **其他整型常量**:句柄基数、容量上限、魔数等一律写成 `enum { ... }`,不用 `#define`。 单个常量用一行 `enum { NAME = 1 };`,成组的写多行块。 - **仍然保留 `#define` 的**:浮点常量(`M_PI` / `TR_PI` / `SH_COVERAGE` / `XLD_EPS` …)、 字符串魔数(`"HTUP"` 等)、句柄/指针常量(`((Hobject)1)`)、平台与编译器相关宏 (`WIN32_LEAN_AND_MEAN` / `HTC_TLS` / `SYS_SNPRINTF`)、函数式宏 —— 枚举只能是整型 常量表达式,装不下这些。 - **例外**:`src/halcon_error_table.c` 由脚本 dump 真 DLL 的错误文本生成,按码升序排列 供二分查找,保持数字字面量;生成器见 `tests/_build/tools/gen_errtab.py`。 - 回归口径:改完 `cmake --build build` + `ctest --test-dir build` 必须全绿(当前 26 项, 含 `ut_base_diff` 与本库 vs 真 HALCON 的逐行比对)。