Repository navigation
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
mkdir build
cd build
cmake .. # 默认 Release(-O2 -DNDEBUG)
cmake --build .- Windows 目标自动附加
-static与四个系统库;产物见build/目录
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 -lwinhttpLinux:
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/。
工作流 .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 ReleaseLinux 下可设置 CLIJUDGE_SANDBOX_DEBUG=<文件> 记录沙箱启动明细(level / 能力预检 caps / 失败点 errno / AppArmor profile),冒烟测试默认启用并会在结尾打印。