Skip to content

Building Testing

dxx114514-stack edited this page Oct 18, 2026 · 5 revisions

构建与测试

环境要求

  • 支持 C++17 的编译器(CI 使用 g++)
  • Windows:需链接 -lpsapi -luserenv -lole32 -lwinhttp;必须保留 -static,否则依赖 libgcc_s_seh-1.dll / libstdc++-6.dll / libwinpthread-1.dll
  • Windows Vista 目标:需 MSVCRT 版 MinGW(winlibs *-msvcrt 或 MSYS2 的 MINGW64);UCRT 版工具链(winlibs UCRT64 / MSYS2 UCRT64)产出的 exe 仅支持 Windows 10+
  • Linux:语言包联网下载(displaylang)已内置 HTTP(S) 客户端,无需 curl;评测 C/C++ 需要 g++/gcc

CMake

mkdir build
cd build
cmake ..            # 默认 Release(-O2 -DNDEBUG)
cmake --build .
  • Windows 目标自动附加 -static 与四个系统库;产物见 build/ 目录

g++ 直接编译

Windows:

windres src/clijudge.rc -O coff -o clijudge_res.o
g++ -std=c++17 -O2 -Wall -static -I include -o clijudge.exe src/main.cpp clijudge_res.o -lpsapi -luserenv -lole32 -lwinhttp

Linux:

g++ -std=c++17 -O2 -Wall -I include -o clijudge src/main.cpp

构建按单翻译单元编译 src/main.cpp(include/ 头文件均已加 inline,源码本身支持多翻译单元,曾以双 TU 链接探针验证);仓库内无外部依赖(nlohmann/json 已合入 include/json.hpp)。

测试

冒烟测试套件位于 tests/,各 37 项检查(建题→测试数据→评测→导入导出→比赛→IDE→自定义语言→配置容错):

# Windows(PowerShell)
powershell -NoProfile -ExecutionPolicy Bypass -File tests\smoke_windows.ps1
# 可选参数 -Bin 指定待测二进制,默认仓库根 clijudge.exe

# Linux
bash tests/smoke_linux.sh
# 可选环境变量 CIJUDGE_BIN 指定二进制,默认仓库根 clijudge

测试使用独立数据目录(CLIJUDGE_DATA_DIR),跑完自动清理,不影响你的 data/。

CI / 发布

工作流 .github/workflows/release.yml,每次 push 到 main 触发:

Job 内容
build-windows g++ -Wall 构建 → smoke_windows.ps1 → 上传 clijudge.exe
build-linux g++ -Wall 构建 → smoke_linux.sh → 重命名 clijudge-linux.bin → 上传
release 提交信息以 build X.Y.Z 开头时创建 Release vX.Y.Z,附两个二进制与自动生成的 changelog

发布示例:

git commit -m "build 1.2.0"
git push origin main     # → CI 构建 + 冒烟 + 创建 v1.2.0 Release

沙箱调试

Linux 下可设置 CLIJUDGE_SANDBOX_DEBUG=<文件> 记录沙箱启动明细(level / 能力预检 caps / 失败点 errno / AppArmor profile),冒烟测试默认启用并会在结尾打印。


返回 Home · 沙箱原理见 沙箱与安全

Clone this wiki locally