DEV Community

Priscira
Priscira

Posted on

Nim

配置文件

~/.config/nim/config.nims

import std/[strutils, strformat]
switch("nimcache", fmt"{getCurrentDir()}/nimcache/{projectName()}/{CompileTime.toHex}")
switch("colors", "on")
# switch("usenimcache")  # 设置后无法正常使用testament
# switch("backend", "c")  # 设置后cc,cpp,js命令失效
Enter fullscreen mode Exit fullscreen mode

编译

常用

  • nim c main.nim 编译main.nim
  • nim r main.nim, nim c -r main.nim 编译并运行main.nim
  • 编译./src/project.nim(项目入口)
    • elvish: nim c -o:"$projectname" --outdir:"$nimcache" ./src/project.nim

语法

nim command [options] [projectfile] [arguments]
Enter fullscreen mode Exit fullscreen mode

command

  • c(compile) 编译
  • r 编译并运行
  • doc 生成文档
  • cc(compileToC) 以C编译
  • cpp(compileToCpp) 以C++编译
  • jsJavaScript编译

options

  • -r(--run) 执行编译后的程序
  • -d:SYMBOL(--define:SYMBOL) 设置编译器符号
    • -d:release 发布
    • -d:testing 测试
    • -d:ssl 激活SSL
  • --app:console|gui|lib|staticlib 编译程序类型:控制台程序、GUI、动态链接库、静态链接库
  • -p:PATH(--path:PATH) 增加搜索路径
  • --backend:c|cpp|js|objc 设置编译后端为CC++JavaScriptObjective-C
  • --noMain:on|off 不生成proc main
  • --nimMainPrefix:PREFIX 跨后端整合时配置初始化函数NimMain()的前缀,构成PREFIXNimMain()
  • -o:FILE(--out:FILE) 设置输出文件名称
  • --outdir:DIR 设置输出文件位置,在设置-o后有效
  • --usenimcache 自动设置outdirnimcache,在设置-o后无效
  • bash: --outdir:\$nimcache
  • elvish: --outdir:'$nimcache', --outdir:"$nimcache"
  • murex: --outdir:\$nimcache, --outdir:'$nimcache'
  • --nimcache:PATH 设置nimcache
  • --mm:orc|arc|refc|markAndSweep|boehm|go|none|regions 配置内存管理方式
    • orc 默认,结合引用计数所有权/借用检查
    • arc 纯粹的原子引用计数
  • --deepcopy:on|off 允许在arc,orc内存管理模式下使用system.deepCopy
  • --threads:on|off 是否开启多线程
  • --colors:on|off 是否开启信息多色配置
  • --stackTrace:on|off 是否开启stackTrace
  • --lineTrace:on|off 是否开启lineTrace
  • --debuginfo:on|off 是否输出调试信息
  • --passC:OPTION 传递给C编译器的option
  • --passL:OPTION 传递给链接器的option
  • -c(--compileOnly:on|off) 只编译,不汇编、链接
  • --noLinking:on|off 只编译、汇编,不链接
  • --putenv:key=value 设置环境变量keyvalue
  • -w:on|off|list(--warnings:on|off|list) 是否输出警告

--warning:X:on|off 是否输出警告XX可以设置为all

--warningAsError:X:on|off 将警告X视为error

  • --skipCfg:on|off 不读取nim安装目录的配置文件$nim/config/nim.cfg$nim/config/config.nims

--skipUserCfg:on|off 不读取用户的配置文件~/.config/nim/config.nims

--skipProjCfg:on|off 不读取项目的配置文件

Nimble

  • nimble init PROJECT 初始化Nim项目
  • nimble install [DEPENDENCE] 安装Nim依赖
  • nimble uninstall DEPENDENCE 删除Nim依赖,但是DEPENDENCE不能作为其他依赖的依赖
    • --inclDeps, -i 删除和DEPENDENCE相关的全部依赖
  • nimble list 查看全局安装的依赖
    • --installed, -i 查看本地安装的依赖
  • nimble deps 以树的结构展示依赖信息
    • --format:json 按照JSON结构展示
  • nimble test 执行.nimble中配置的测试
  • nimble build 按照默认配置或$projectdir/config.nims构建

Testament

常用

  • testament p "tests/test.nim"
  discard """
    action: "run"
    targets: "c"
    cmd: "nim r -d:testing $file"
  """
Enter fullscreen mode Exit fullscreen mode

语法

testament command [projectfile] [options]
Enter fullscreen mode Exit fullscreen mode

command

  • p PATTERN, pat PATTERN, pattern PATTERN 测试路径符合PATTERN的文件

测试$projectdir/tests/test.nim: testament p "tests/test.nim"

测试$projectdir/tests/*.nim: testament p "tests/*.nim"

  • all 测试所有在tests/category下的.nim
  • r SINGLE, run SINGLE 测试在tests/category下的SINGLE(.nim)

options

  • --targets:c|cpp|js|objc 设置编译后端
  • --colors:on|off 是否开启信息多色配置

discard

  • action
    • compile 编译成功
    • run 编译并执行成功
    • reject 编译失败
  • cmd 测试时执行的命令
  # 默认
  # $target: --targets
  nim $target --hints:on -d:testing --nimblePath:build/deps/pkgs $options $file
Enter fullscreen mode Exit fullscreen mode
  • targets 测试时编译的后端,取值有c, cpp, js, objc,多个后端以分割
discard """
targets: "c js"
"""
  • matrix 测试时的-d:SYMBOL,多种配置以;分割
discard """
matrix: "; -d:release; -d:caseFoo -d:release"
"""

Top comments (0)