| name | cangjie-cjc |
| description | 仓颉编译器 cjc 核心用法。当需要了解 cjc 编译命令的常用选项,包括基本编译、输出类型、包编译、模块管理、链接库、调试、测试、宏编译、条件编译、优化、交叉编译等,应使用此 Skill。 |
仓颉编译器 cjc 核心用法
1. 基本用法
cjc [option] file...
cjc hello.cj
cjc hello.cj -o hello
cjc-frontend:仅前端编译器,输出 LLVM IR(.bc)
cjc:自动完成 前端 + 后端 + 链接
2. 核心选项速查
2.1 输出控制
| 选项 | 说明 |
|---|
-o <file> | 指定输出文件路径 |
--output-type=[exe|staticlib|dylib] | 输出类型(默认 exe) |
--output-dir <dir> | 中间文件与输出保存目录 |
cjc tool.cj --output-type=dylib
cjc tool.cj --output-type=staticlib
2.2 包与模块
| 选项 | 说明 |
|---|
-p, --package | 编译整个包目录 |
--module-name <name> | 指定模块名 |
--import-path <dir> | 添加 .cjo 文件搜索路径(同 CANGJIE_PATH) |
cjc -p log --output-type=staticlib
cjc main.cj liblog.a
cjc -p src/log --module-name myModule --output-type=staticlib -o myModule/liblog.a
2.3 链接
| 选项 | 说明 |
|---|
-L <dir> | 库文件搜索目录 |
-l <name> | 链接库(搜索 lib<name>.a/.so) |
--static | 静态链接仓颉库(仅 Linux) |
--static-std / --dy-std | 静态/动态链接 std 模块 |
--static-libs / --dy-libs | 静态/动态链接非 std 模块 |
cjc main.cj -L . -l cProg
cjc main.cj mylib.so --dy-std --dy-libs
注意:--dy-std 与 --static-libs 不可同时使用;--static-std 与 --dy-libs 不可同时使用。
2.4 调试与诊断
| 选项 | 说明 |
|---|
-g | 生成调试信息(须配合 -O0) |
-V, --verbose | 打印编译过程详细信息 |
-v, --version | 打印编译器版本 |
-h, --help | 打印帮助信息 |
--diagnostic-format=[default|noColor|json] | 错误信息输出格式 |
--error-count-limit <N|all> | 限制打印错误数量(默认 8) |
2.5 测试
cjc a.cj --test
cjc -p pkg --test
cjc -p pkg --test-only -L out -l main
2.6 宏
cjc --compile-macro macro.cj
cjc main.cj --debug-macro
2.7 条件编译
cjc main.cj --cfg "env=prod"
2.8 优化
| 选项 | 说明 |
|---|
-O0 / -O1 / -O2 / -Os / -Oz | 优化级别 |
--lto=[full|thin] | 链接时优化(仅 Linux) |
-j <N>, --jobs <N> | 并行编译最大线程数 |
--int-overflow=[throwing|wrapping|saturating] | 整数溢出策略(默认 throwing) |
cjc test.cj --lto=full
cjc test.cj -j 4
2.9 覆盖率与性能分析
cjc --coverage main.cj
cjc test.cj --pgo-instr-gen
cjc test.cj --pgo-instr-use=default.profdata
2.10 交叉编译
cjc hello.cj --target=x86_64-windows-gnu
cjc hello.cj --target=arch-os-env --sysroot /usr/sdk/arch-os-env
2.11 其他常用选项
| 选项 | 说明 |
|---|
--trimpath <prefix> | 移除调试信息中的路径前缀 |
-s, --strip-all | 删除输出文件中的符号表 |
--set-runtime-rpath | 写入运行时库路径到 RPATH |
--disable-reflection | 关闭反射信息生成 |
--no-sub-pkg | 声明无子包以缩减 code size |
--stack-trace-format=[default|simple|all] | 异常调用栈格式 |
3. 典型工作流
cjc hello.cj -o hello && ./hello
cjc -p lib/utils --output-type=staticlib
cjc main.cj libutils.a -o app
cjc main.cj -g -O0 -o app_debug
cjc main.cj -O2 --lto=full -s -o app_release
提示:多文件项目推荐使用 cjpm(参见 cangjie-project-management Skill),无需手动管理编译依赖。