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
使用,可以展示运行时间及占用空间。
延伸阅读:
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。