C++ プログラムをビルドして実行するための bash スクリプトを作成する

C++ プログラムをビルドして実行するための bash スクリプトを作成する

私は、1つのコマンドでC++プログラムをビルドして実行するbashスクリプトを作成しようとしています。通常、現時点では

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

関連情報