编写 Bash 脚本来构建和运行 C++ 程序

编写 Bash 脚本来构建和运行 C++ 程序

我正在尝试编写一个 bash 脚本,使用一个命令一次性构建并运行一个 C++ 程序,通常现在我必须这样做

g++ file.cc -o file
./file < input.in

我希望能够做到

brun file.cc < input.in

我该怎么做?现在我可以像这样运行

brun file.cc '< input.in'

这是我现在的脚本

#!/bin/bash

CFILE=$1
OBJFILE="${CFILE%.*}"

g++ $CFILE -o $OBJFILE
echo  "Built file: $CFILE -> $OBJFILE"
chmod +x $OBJFILE

ARGS="${@##*.cc}"
./$OBJFILE""$ARGS

它卡在最后一行,然后什么也不做。有人能帮我吗?

答案1

这应该足够了:

#!/bin/bash

CFILE=$1
OBJFILE="${CFILE%.*}"

g++ $CFILE -o $OBJFILE
echo  "Built file: $CFILE -> $OBJFILE"

./$OBJFILE

你应该可以这样称呼它:

brun file.cc < input.in

这是有效的,因为重定向到脚本的 STDIN 的输入brun只是被缓冲,并且缓冲的输入可供首先读取它的任何子进程使用 - 在本例中是您新建的可执行文件。


您还可以考虑使用make来自动化构建。 make它足够智能,可以根据默认规则进行构建,而无需显式 makefile。因此,您的构建/运行脚本可以简单到如下:

#!/bin/bash

OBJFILE="${1%.*}"
make "$OBJFILE" && ./$OBJFILE

这里&&确保仅当未发现任何构建错误时才运行 OBJFILE make

相关内容