《仓颉语言实战》仓颉编译器cjc详解:常用编译选项与条件编译速查表
【免费下载链接】仓颉语言实战-张磊仓颉语言实战由张磊编写,清华大学出版社出版。 该书践行“零基础入门仓颉语言”的理念,具有内容通俗易懂,知识点循序渐进的特点,可以帮助读者快速掌握仓颉编程语言。项目地址: https://gitcode.com/Cangjie-SIG/cangjieyuyanshizhan-ZL
《仓颉语言实战》(张磊 著,清华大学出版社)配套源码仓库中,第26章完整演示了仓颉编译器 cjc的常用编译选项与条件编译写法。本文以"速查表"形式整理 cjc 编译命令、核心参数、@When条件编译宏与单元测试编译方法,帮助新手快速上手仓颉语言的编译与构建流程,无需逐字通读也能查表即用。
一、cjc 是什么?一分钟理解仓颉编译器
cjc 是仓颉语言自带的官方编译器命令,负责把.cj源文件编译、链接为可执行程序。其基本用法如下:
cjc compile main.cj执行后会在当前目录生成与入口函数同名的可执行文件(如main)。你可以通过cjc compile --help查看全部选项,下面这张表汇总了日常开发最常用的参数。
二、cjc 常用编译选项速查表 💡
| 选项 | 作用 | 典型场景 |
|---|---|---|
compile | 编译子命令,后接.cj文件 | 日常编译的固定入口 |
-target <平台> | 指定目标平台,如x86_64-unknown-linux | 交叉编译到不同系统 |
-opt <0~3> | 设置优化等级,数字越大优化越深 | 发布版用高级优化 |
-I <路径> | 添加源文件搜索路径 | 多目录工程管理 |
-l <库名> | 链接外部 C 库 | 调用系统 C 接口 |
--lib-path <路径> | 指定链接库搜索路径 | 第三方库位置不在默认目录 |
--import <包> | 编译时导入第三方包 | 使用社区仓颉包 |
--export <包> | 将源文件导出为包 | 把模块发布为可复用包 |
--emit <格式> | 指定产物类型:可执行文件/动态库/目标文件 | 编译成.so动态库 |
-D <宏=值> | 定义编译期宏,供@When使用 | 条件编译的开关来源 |
--test | 以单元测试模式运行编译产物 | 跑@TestCase用例 |
--testcase <用例> | 只运行指定测试用例 | 快速验证单个用例 |
--print-cangjie-ir | 打印仓颉中间表示 | 学习编译器原理 |
--print-llvm-ir | 打印 LLVM IR | 深入底层代码生成 |
--version/--help | 查看版本 / 帮助信息 | 环境自检 |
📌 新手记忆法:日常只需记住
compile、-opt、-D、--test、--import/--export五组,其余按需查表即可。
三、条件编译:用 @When 让代码"按环境生效"
条件编译是 cjc 编译选项的高阶玩法:通过@When[条件]标注代码块,再配合-D选项传入宏值,让同一段源码在不同平台或配置下编译出不同行为。
1. 按操作系统分支(见 condition_compile.cj)
// @When[os == "linux"] // func print() { println("linux") }2. 按自定义宏分支(见 user_defined_condition_compile.cj):编译时加上-D db=mysql,即可让@When[db=="mysql"]标注的函数参与编译。
3. 多条件组合(见 multi_condition_compile.cj):使用&&连接多个条件,例如@When[db=="mysql"&&os=="linux"],实现"数据库 + 操作系统"双重定向编译,适合按部署环境裁剪功能。
⚠️ 注意:书中示例已全面适配仓颉 1.0.0,当前版本暂不支持
when关键字,相关写法在示例中以注释形式保留,升级后可直接放开使用。
四、编译即测试:用 --test 跑单元测试
把--test加入编译命令,cjc 会执行源码中的@TestCase用例。配套示例 test_demo.cj 基于std.unittest框架定义测试类,编译运行后即可在终端看到用例输出,无需额外测试工具。
五、包编译实战:--export 与 --import 配合
书中 log/printer.cj 演示了将日志模块导出为包log,再由 cjc_demo.cj 通过import log.printLog导入使用;同目录的 loga/printer.cj 则展示了同一功能的另一种时间格式化写法,方便对比学习。编译时通过--export log指定包名,即可让其他文件引用。
六、获取完整示例代码
配套仓库包含全书 27 章示例,可直接克隆使用:
git clone https://gitcode.com/Cangjie-SIG/cangjieyuyanshizhan-ZL编译选项与条件编译的完整示例集中在 code/Chapter26/ 目录,调试相关的cjdbg命令则可在 code/Chapter27/ 中继续学习。
小结🚀:cjc compile是仓颉开发的起点——用-opt调优化、用-D+@When做条件编译、用--test跑测试、用--export/--import组织包。掌握这张速查表,再配合《仓颉语言实战》第26章的逐行示例,即可独立完成从编写到发布的完整编译流程。
【免费下载链接】仓颉语言实战-张磊仓颉语言实战由张磊编写,清华大学出版社出版。 该书践行“零基础入门仓颉语言”的理念,具有内容通俗易懂,知识点循序渐进的特点,可以帮助读者快速掌握仓颉编程语言。项目地址: https://gitcode.com/Cangjie-SIG/cangjieyuyanshizhan-ZL
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考