shell 脚本实现源文件编译成对应名称的可执行文件

背景

有时候需要对一些单独的测试用例进行依次编译,比如编译测试用例 test1.c 生成对应的可执行文件 test1,test2.c 生成 test2。为了避免重复性的对不同测试用例进行编译,通过一个简单的脚本实现该功能。

脚本

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 <file_name>"
exit 1
fi

file_name="$1"
exec_name=$(basename "$file_name" .c)

set -x

gcc -g -O0 -Wno-all -I../../ ../../sljitLir.c "$file_name" -o "$exec_name"

效果

1
2
3
4
$ ./cmd.sh 
Usage: ./cmd.sh <file_name>
$ ./cmd.sh first_program.c
+ gcc -g -O0 -Wno-all -I../../sljit_src ../../sljit_src/sljitLir.c first_program.c -o first_program

get 小技巧

basename 命令用于获取指定路径字符串的基本文件名部分,可删除文件名后缀。

例如:basename /path/to/file.txt 结果为 file.txt,basename file.txt .txt 结果为 file

使用 set -x 命令来启用调试模式,让每个执行的命令的过程显示到命令行。