由于最近在尝试一些新的编辑器来进行单个代码文件的开发(例如竞赛开发),而这些编辑器需要使用命令行才可以编译运行代码。但是,每次运行代码都需要重复输入一长串的命令,这样就会很繁琐,因此我就想到了使用终端命令别名来简化这个过程。

注意!

此处的一些功能可能仅适用于 macOS 操作系统。Linux 上的操作应该是类似的,而 Windows 用户可能需要使用 WSL 实现此功能。

代码运行

我们先来看看常见情况下编译并运行代码的命令

C++

1
g++ -std=c++17 -O2 -o Main.out Main.cpp -Wall && ./main

注意,此处的命令使用了以下参数:

  • -O2:让 g++ 编译器通过增加编译时间换取更快的运行速度。(参考本文
  • -std=c++17:指定 g++ 编译器使用 C++17 标准编译代码。假如你希望使用其他标准,可以参考此处的标准列表。
  • -Wall:检查一些常见错误

Java

1
javac Main.java && java Main

设置终端命令别名

我们可以通过设置别名来简化上述两个命令为 runc(运行 C++ 代码)和 runj(运行 Java 代码),具体操作如下:

  1. 打开终端,输入 vim ~/.bashrc,进入编辑模式
  2. 增加以下内容
1
2
3
4
5
6
7
8
# Compile & Run C++

coc() { g++ -std=c++17 -O2 -o "${1%.*}.out" $1 -Wall; }
runc() { coc $1 && ./${1%.*}.out & fg; }

# Compile & Run Java

runj() { javac $1 && java ${1%.*}; }
  1. 保存退出,输入 source ~/.bashrc 使设置生效
`& fg` 是做什么用的?

& fg 会将正在运行的任务的控制信息显示到前台
一些错误信息(例如 C++ 的 segmentation fault)需要用此方法才可以显示出来。

使用

现在我们就可以使用 runcrunj 来编译运行代码了。假如我们有一个名为 main.cpp 的 C++ 代码文件,我们可以使用 runc main.cpp 来编译然后运行它,而不需要输入那么长的命令。对于 Java 代码,我们可以使用 runj main.java 来编译然后运行它。

参考