cjbind
依赖版本
- 仓颉版本:
nightly:当前 CI 使用1.1.0-alpha.20260603010036 - uv:
>= 0.6.0Python 版本:>= 3.11:用于运行scripts下的脚本并自动配置依赖 - Go:
>= 1.24:用于构建 opt 的补丁
修补旧版编译器
仓颉 1.1.x 旧版工具链可能需要为 opt 生成补丁。当前 nightly 不需要此步骤。
如需在旧版工具链上运行,确保当前环境中安装了 Go,并且环境变量 CANGJIE_HOME 指向仓颉的安装目录。
在 cjbind 的根目录下运行以下命令:
uv run scripts/patch_opt.py
这会构建 scripts/opt.go 并替换原有的 opt,原有的 opt 会被重命名为 opt.old(.exe)。
这是为了 workaround 编译器中 llvm pass cangjie-ir-verifier 在 cjbind.clang 上的错误报错。
更新版本
- 更新
cjpm.toml
生成 libclang 绑定
假设 libclang 的头文件在 T:\cjbind-bootstrap\include\clang-c\Index.h,可以使用以下命令生成 libclang.cj:
cjbind -o libclang.cj -p cjbind.clang T:\cjbind-bootstrap\include\clang-c\Index.h -- -I T:\cjbind-bootstrap\include\
拉取最新的 libclang 预编译包
此程序依赖于 libclang,请确保你的系统中安装了 llvm。
当前 cjbind 使用 qt 提供的预编译 libclang。使用以下命令下载 libclang:
uv run scripts/download.py
构建
因为仓颉当前不支持在 build.cj 中设置 link-options, 因此编译时需要设置环境变量来完成链接。
使用 scripts/cjpm.py 来自动设置环境变量。
uv run scripts/cjpm.py build -V
链接模式
通过 --static 参数控制是否静态链接:
- 默认:动态链接系统
libclang,需要运行时有libclang可用 --static:静态链接libclang,生成的二进制文件不依赖外部libclang
# 动态链接(默认)
uv run scripts/cjpm.py build -V
# 静态链接
uv run scripts/cjpm.py --static build -V