Создание сценария удара, чтобы создать и запустить программу C++

Я пытаюсь сделать сценарий удара, чтобы создать и запустить программу 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

Который застревает в последней строке, она просто ничего не делает затем. Кто-либо может помочь мне здесь?

3
задан 23 October 2015 в 03:44

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.

2
ответ дан 1 December 2019 в 17:00

Другие вопросы по тегам:

Похожие вопросы: