製作 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

相關內容