web-dev-qa-db-ja.com

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

最後の行で行き詰まってしまい、何もしません。誰でもここで私を助けることができますか?

3
Jahanzeb Khan

これで十分です:

#!/bin/bash

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

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

./$OBJFILE

そして、次のように呼び出すことができるはずです。

brun file.cc < input.in

これは、brunスクリプトのSTDINにリダイレクトされた入力が単にバッファリングされ、そのバッファリングされた入力が、最初に読み込むサブプロセス(この場合は新しく作成された実行可能ファイル).


makeを使用してビルドを自動化することも検討できます。 makeは、明示的なmakefileを必要とせずにデフォルトのルールからビルドを実行するのに十分スマートです。したがって、ビルド/実行スクリプトは次のように簡単になります。

#!/bin/bash

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

ここの&&は、makeでビルドエラーが見つからなかった場合にのみOBJFILEが実行されるようにします。

2
Digital Trauma