Nim会将自己的代码转换为C代码,并使用C编译器进行编译。Zig具有自己的编译器,具有许多不错的功能,使您想使用它,例如允许您选择要动态链接的glibc版本,或者更容易进行交叉编译。
因此,我想使用zig编译器来编译我的Nim代码,但这是否可行呢?
因此,我想使用zig编译器来编译我的Nim代码,但这是否可行呢?
zigcc
的bash或其他shell脚本,其唯一目的是调用zig编译器。这是必需的,因为确定使用哪个编译器的标志在其参数中不允许带有空格,但我们确实需要它。编写完成后,将zigcc
移动到路径环境变量上的某个目录中,例如Linux上的/usr/local/bin
,或将包含zigcc
脚本的目录的路径添加到PATH变量中。nimble install https://github.com/enthus1ast/zigcc
),其中包含正好此类脚本,该脚本将安装到已经在您路径上的nimble目录中。#!/bin/sh
zig cc $@
zigcc
进行编译。以下是一个示例bash脚本,您可以用于这些目的:#!/bin/sh
nim c \
--cc:clang \
--clang.exe="zigcc" \
--clang.linkerexe="zigcc" \
--forceBuild:on \
--opt:speed \
src/<YOUR_MAIN_FILE>.nim
--passC:"-target x86_64-linux-gnu.X.XX -fno-sanitize=undefined" \
--passL:"-target x86_64-linux-gnu.X.XX -fno-sanitize=undefined" \
编写一个Nim程序(zigcc.nim编译为zigcc.exe):
import std/osproc
import os
var pStr: string = "zig cc"
for i in 1..paramCount():
pStr.add(" "¶mStr(i))
discard execShellCmd(pStr)
将nim.exe和zig.exe的路径设置为环境变量,将zigcc.exe复制到Zig的主目录中,然后像这样调用Nim:
nim c --cc:clang --clang.exe="zigcc" --clang.linkerexe="zigcc" yourFileName.nim
神奇的事情发生了...