0.0.1 • Published 6 years ago

venus-acm-cpp-tool v0.0.1

Weekly downloads
3
License
MIT
Repository
github
Last release
6 years ago

前言

这个命令行工具是为热爱 acm 的同学定制的,它只为解决一个问题:在本地直接引用自己写好的数据结构、算法,而不必丑陋的复制粘贴,在提交代码的时候,通过执行此命令行工具,将所有的依赖都写入到一个文件中。 使用本工具需要一个条件,就是需要在工程中定义一个 CMakeLists.txt,你可以在 demo 中查看,强烈建议使用 CLion 构建工程,事实上,本工具就是基于本人 在 CLion 中的使用设计的:

  • 在 CLion 的 File -> Settings -> Tools -> TerminalShell Path 中填上 '<your git installer path>/bin/sh.exe' --login -i,它可以让在 Clion 下方的 Terminal 中直接使用 shell (此命令行工具需要在 shell 环境下执行)
  • 将你的本地类库文件夹中右键(在 CLion 中操作),Mark directory as => Library Files/Project Sources and Headers
  • 在你新建的工程中 Edit Configurations -> Templates -> ApplicationWorking directory 中填入当前工程的根路径
  • 在工程中新建 CMakeLists.txt,填入 demo 中的内容,强烈建议你构造形如 demo 中的结构
  • 每次新建文件时,通过 create/new 子命令创建,可以将当前文件在 CMakeLists.txt 中注册一个 add_executable 字段,然后就可以直接 CLion 中调试、运行新创建的文件了
  • 在需要提交的时候,通过 generate 子命令生成拥有所有依赖的外部文件的单一源文件(你可以通过一些压缩选项来压缩代码的大小)

安装

npm install -g venus-acm

使用

执行 venus --help 可以看到命令的用法:

  Usage: main [options] [command]


  Options:

    -V, --version                    output the version number
    --log-level <level>              index logger's level.
    --log-option <option>            index logger' option. (date,colorful)
    --cmake-lists <cmakeLists-name>  index cmakeLists name. (default is CMakeLists.txt)
    --encoding <encoding>            index encoding of all files.
    --config-path <config-path>      index config path, related with the project root directory where the CMakeLists.txt exists.
    --no-config                      don't use config.
    -h, --help                       output usage information


  Commands:

    generate|g [options] <source> [target]
    create|new [options] [source...]
    register|r [options] <source...>
    remove|d [options] <source...>
    clean|c [options] [directory]
    *

其中 Commands 下方的是子命令,见下文;同时,需要注意的是,你可以通过在工程根目录下指定一个 venus.config.yml 来定义命令选项的默认值,见 demo

命令选项

  • --version: 显示命令的版本
  • --log-level <level>: 指定输出的日志级别,可选值有 debug, verbose, info, warn, error ,默认值为 info
  • --log-option <option>: 指定输出的日志选项,可选值有 date, colorful
  • --cmake-lists <cmakeLists-name>: 指定 CMakeLists.txt 名称,默认值为 CMakeLists.txt
  • --encoding <encoding>: 指定工程下文件的默认编码格式
  • --config-path <config-path>: 指定配置文件所在的路径(相对于工程的根目录),默认值为 venus.config.yml
  • --no-config: 不使用配置文件
  • --help: 显示命令的帮助

子命令 generate

执行 venus generate --help 可以看到 generate 的用法:

  Usage: generate|g [options] <source> [target]


  Options:

    -d, --output-directory <output-directory>  specify output directory, related with the project root directory where the CMakeLists.txt exists.
    --rc, --remove-comments                    remove comments.
    --rs, --remove-spaces                      remove spaces.
    --rf, --remove-freopen                     remove freopen statements.
    --ra, --remove-assert                      remove assert statements.
    -u, --uglify                               shortcut of --rc --rs.
    -c, --copy                                 copy to system clipboard, this option will invalidate the output options: '-f', -d' and '-p'.
    -f, --force                                if the target file is exists, overwrite it without confirmation.
    -h, --help                                 output usage information

其中 source 为你需要打包的文件的路径,target 为打包后的文件名,若不指定则为生成一个默认的名称

命令选项

  • --output-directory <output-directory>: 指定输出目录,路径相对于工程的根目录
  • --remove-comments: 删除源码中所有的注释(请放心使用,它不会删除正常的输出中的形如 printf("/* */") 的代码)
  • --remove-spaces: 删除源码中所有多余的空格(请放心使用,它不会删除正常的输出中的形如 printf(" ") 的代码)
  • --remove-freopen: 删除源码中的 freopen 代码
  • --remove-assert: 删除源码中的 assert 代码
  • --uglify: 相当于同时指定 --remove-comments--remove-spaces
  • --copy: 不将打包后的内容输出的文件,而是输出到系统剪切板中,若指定该选项,则 --outputDirectorytarget 都将失效
  • --force: 当输出文件已存在时,会在命令行中发起一个确认删除的交互,若指定该选项,则将无需确认就覆盖掉文件
  • --help: 显示命令的帮助

子命令 create/new

venus newvenus create 是完全等价的命令,执行 venus create --help 可以看到 create/new 的用法:

  Usage: create|new [options] [source...]


  Options:

    -t, --template-path [template-path]                  specify template path, related with the project root directory where the CMakeLists.txt exists.
    -T, --no-template                                    don't use template.
    -d, --data-path [template-path]                      specify data path, related with sourcePath
    -D, --no-data                                        don't use data.
    -c, --contest <contest-phase>                        specify contest which defined in config.
    -r, --round <contest-round>                          specify contest round, valid only when the option '-c' specified..
    -p, --problem-number <contest-round-problem-number>  specify contest round's problem number, valid only when the option '-c' specified..
    -h, --help                                           output usage information

这个命令用于创建新的程序文件,其中,source 是待创建的文件列表。

命令选项

  • --template-path [template-path]: 指定模板的路径
  • --no-template: 不使用模板
  • --data-path: 数据文件的路径
  • --no-data: 不生成 data.in,(之所以这么古怪,是因为本工具使用了 commander.js,目前版本的 commander.js 有一个 bug,若同时声明了 --data--no-data 选项,则后声明的将覆盖掉之前声明的,目前 commander.js 将这 bug 的修复放入了下一个大版本更新计划中,此后本人将会做更新;由于本人擅自认为使用 freopen 是更常用的场景(且 generate 时会自动移除掉),因此目前只提供 --no-data 选项
  • --contest <contest-phase: 解释比较复杂,试试在 demo 中执行 venus create --contest=codeforces --round=512 --problem-number=4
  • --round <contest-round>: 指定比赛的场次,和 --contest 选项配套使用,不可独立出现,且在指定了 --contest 选项时,必须同时也指定此选项
  • --problem-number <contest-round-problem-number>: 指定本场比赛的题目个数,和 --contest 选项配套使用,不可独立出现,且在指定了 --contest 选项时,必须同时也指定此选项
  • --help: 显示命令的帮助

子命令 register

执行 venus register --help 可以看到 register 的用法:

  Usage: register|r [options] <source...>


  Options:

    -r, --recursive  register all files in the directory recursively.
    -h, --help       output usage information

这个命令用于将一个程序文件 “注册” 进 CMakeLists.txt 中,即在 CMakeLists.txt 中注册一个 add_executable 字段,使得你可以在如 CLion 中调试运行该程序

命令选项

  • --recursive: 当 source 为文件夹时,若指定该选项,则将扫描该文件夹下的整棵目录树
  • --help: 显示命令的帮助

子命令 remove

执行 venus remove --help 可以看到 remove 的用法:

  Usage: remove|d [options] <source...>


  Options:

    -r, --recursive  remove all files in the directory recursively.
    -f, --force      remove file without confirmation.
    -h, --help       output usage information

这个命令用于将一个程序文件移除,同时也清理 CMakeLists.txt 中的相应 add_executable 字段

命令选项

  • --recursive: 当 source 为文件夹时,若指定该选项,则将扫描该文件夹下的整棵目录树
  • --force: 删除时,无需用户确认
  • --help: 显示命令的帮助

子命令 clean

执行 venus clean --help 可以看到 clean 的用法:

  Usage: clean|c [options] [directory]


  Options:

    -r, --recursive          remove all files in the directory recursively.
    -f, --force              clean file without confirmation.
    -p, --pattern <pattern>  clean file which should matched the pattern. (default: )
    -h, --help               output usage information

这个命令用于清理指定文件夹下的无用文件,并清理 CMakeLists.txt 中无用的 add_executable 条目,当未指定路径时,则当前执行命令的路径作为参数

命令选项

  • --recursive: 递归清理
  • --force: 删除时,无需用户确认
  • --pattern: 指定需要删除的模式(minimatch 匹配的模式),可以多次指定该选项,也可以在 venus.config.yml 中配置默认的模式
  • --help: 显示命令的帮助