SuperAPI AI 工具集

win64-native-builds

编程与开发

查看项目

更新于 10-30 16:18

技能介绍

Win64 Native Builds 是一套用 shell 工具从源码构建原生 Windows 可执行文件的操作手册,面向需要构建、测试并对发布做门禁检查的 C/C++ 项目。

用途与编译器选择:文档把编译器选择视为关键分叉点。若应用自带 Win32 头文件(例如 win32_min.h,仅声明原型、不包含 libc 头),则 Clang 无需 Windows SDK 即可工作,这也是在未安装 MSVC 的机器上实现 -Werror 严格发布构建的前提;Clang 路径为 C:/Program Files/LLVM/bin/clang.exe。凡是包含 libc 头(如 stdio.h、string.h,几乎涵盖所有测试),应使用 PATH 中的 mingw gcc。默认 MSVC 模式的 Clang 在未安装完整 Windows SDK 前缺少 libc/UCRT 头,文档建议不要强行使用,测试也不需要 clang。测试可直接 #include "main.c" 以访问所有 static 符号,无需抽取头文件;若应用定义了 WinMain,测试主函数需提供 dummy WinMainCRTStartup 定义。

关键编译参数:-fno-builtin 用于测试/gcc 构建,避免编译器把手写的 memset/memcpy 变成对自身的调用而导致无限递归(在栈溢出前不会报错);-l<lib> 必须放在源文件之后,因为 GNU ld 从左到右解析,库在前会导致符号未解析;-Wl,--stack,8388608 用于避免测试中大型静态数组导致默认 1 MB 栈溢出;测试套件使用 -O2 -w,严格性留给应用的 -Werror 构建。

测试运行器模式:提交一个 run_all_tests.sh,切换到脚本目录,按 gcc→cc→clang 选择首个可用编译器,使用固定参数编译每个 *_test.c 并逐个运行,打印 PASS/FAIL 名称与最终计数;运行前先删除输出目录的旧文件,避免陈旧通过掩盖失败。每个测试在检查之间使用 reset_all() 辅助函数,断言式检查打印 FAIL: 并设置非零退出码。

发布门禁(按顺序全部执行,而非仅断言):严格构建(-Werror)退出码为 0;完整测试套件全绿并报告 N/N 而非笼统的“测试通过”;双重构建得到相同 SHA-256(确定性);清洁室重建:在临时目录用原始源码副本重建,二进制逐字节一致;记录哈希(PATCH_SHA256SUMS.txt);清理 GOLD 树中的 *.o、日志、存档文件和测试残留。

终端使用纪律:每次 terminal() 调用保持小粒度,一次一个 grep、一个 sed 范围或一个构建步骤;带嵌套 $() 和多层引号的复杂单行命令会触发解析器而整体被阻止,复杂逻辑应写入 .sh 文件再执行 bash;优先使用 read_file/sed 范围而非 cat,优先搜索工具而非 find/xargs 链。

常见陷阱:版本字符串不只存在于 VERSION.txt,通常还有代码内启动日志行,声称完成版本号更新前应在源码中检索版本标记;开发树不等于发布树,冲刺期间编写的文档必须复制进打包的 GOLD 文件夹,开发树的 VERSION.txt 也需同步更新,两者都要验证。