MENU

OI 考场编译运行技巧

OI 考场上可以通过编写 shell 脚本,避免每次写较长的编译及运行命令。

现学现卖,省选实践。

shell 脚本中通过美元符号 $ 调用变量(定义时不需要),例如 $var,并可以添加大括号 {} 标识变量名的边界,例如可以在字符串中通过 "${prefix}content" 将拼接在一起的变量和字面量分开。 此外,可以通过 $1$2$3 这种美元符号 + 编号的方式获取从命令行传入的参数,我们主要使用这一语法。

一个 compile.sh 可以这样写:

#!/bin/bash
g++ $1.cpp -std=c++17 -fsanitize=address,undefined -g -Wall -Wshadow -o $1

-g 会生成调试信息,除调试外可以帮助 ASan 定位报错行数。

其中 #!/bin/bash 表示用 bash 执行脚本,不加则使用系统默认 shell 执行,NOI Linux 上默认即为 /bin/bash

脚本编写完成后,通过 chmod +x compile.sh 为脚本添加运行权限,可以通过以下方式运行脚本:

./compile.sh test
./compile.sh "/Users/liuxizai/Documents/Competitive Programming/codes/test"
./compile.sh ./codes/test

这将会编译对应位置的 test.cpp 得到 test 的可执行文件。

一个 run.sh 可以这样写:

#!/bin/bash
gtime -f "%es %MKB" ./$1

同理,添加运行权限后即可用类似方式运行。

这里的 gtime 是 macos 下的 GNU time,NOI Linux 可通过 /usr/bin/time 使用,可以展示运行时间及占用空间。


延伸阅读:

Last Modified: February 28, 2024
Archives Tip
QR Code for this page
Tipping QR Code