wavec CLI参考
本文详述了基于当前Wave编译器(wavec)实现标准的CLI操作。
核心原则:
wavec是编译器。- 包的安装/解决(lockfile、registry、下载)不属于
wavec的责任。 - 外部依赖通过执行
wavec时的显式CLI参数传递。
1. 基本格式
wavec [global-options] <command> [command-options]
例如:
wavec -O2 run main.wave
wavec build app.wave --link ssl -L ./native/lib
wavec run app.wave --dep-root .vex/dep
2. 命令解析规则(重要)
wavec首先扫描所有参数中的全局选项,然后解释剩余参数为<command>。
即全局选项的位置是灵活的。
wavec -O3 run main.wave
wavec run main.wave -O3
wavec run -O3 main.wave
以上三个都是有效的。
使用--后,将停止全局选项扫描并转到命令区域。
wavec -- run main.wave
3. 命令
3.1 run <file>
编译并运行Wave文件。
wavec run hello.wave
操作:
- 源解析 + 导入扩展
- 生成LLVM IR
- 本机二进制链接(
target/<file_stem>) - 执行
特点:
- 执行的程序的退出代码由
wavec传递。
3.2 build <file>
生成可执行文件(exe)。
wavec build app.wave
输出二进制文件:
target/<file_stem>
3.3 build选项(-o, -c)
build命令可以用选项控制输出文件名和格式。
wavec build app.wave -o ./bin/app
wavec build app.wave -c
wavec build app.wave -c -o ./build/app.o
-o <file>: 指定输出文件名。- 默认(无
-c):指定可执行文件输出路径 - 与
-c一起:指定目标文件输出路径
- 默认(无
-c:省略链接,仅生成目标文件。- 使用
-c时,将目标路径输出到标准输出。
默认操作:
wavec build app.wave->target/appwavec build app.wave -c->target/app.o(路径输出)
独立内核对象示例:
wavec --llvm \
--target=x86_64-unknown-none-elf \
build kernel.wave --emit=obj --freestanding -o kernel.o
aarch64-unknown-none-elf, riscv64-unknown-none-elf也可以以同样的方式使用。
3.4 install std, update std
标准库安装/更新命令。
wavec install std
wavec update std
3.5 --help, --version
wavec --help
wavec --version
4. 全局选项
4.1 优化
允许值:
-O0-O1-O2-O3-Os-Oz-Ofast
例如:
wavec -O3 run main.wave
4.2 调试输出
wavec --debug-wave=tokens,ast,ir run main.wave
