Criando um script bash para construir e executar um programa em C ++

3

Eu estou tentando fazer um script bash para construir e executar um programa C ++ de uma só vez com um comando, normalmente agora eu tenho que fazer

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

Eu quero ser capaz de fazer, digamos

brun file.cc < input.in

Como posso fazer isso? Agora eu tenho algo que pode ser executado como

brun file.cc '< input.in'

Aqui está meu script atual

#!/bin/bash

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

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

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

O que fica preso na última linha, simplesmente não faz nada. Alguém pode me ajudar aqui?

    
por Jahanzeb Khan 23.10.2015 / 02:44

1 resposta

3

Isso deve ser suficiente:

#!/bin/bash

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

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

./$OBJFILE

E você deve poder ligar assim:

brun file.cc < input.in

Isso funciona porque a entrada redirecionada para STDIN do script brun é simplesmente armazenada em buffer, e essa entrada armazenada em buffer fica disponível para qualquer subprocesso lê-lo primeiro - neste caso, seu executável recém-construído.

Você também pode considerar usar make para automatizar sua compilação. make é inteligente o suficiente para fazer sua compilação a partir de regras padrão sem a necessidade de um makefile explícito. Portanto, seu script de compilação / execução pode ser tão simples quanto:

#!/bin/bash

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

O && aqui garante que o OBJFILE seja executado somente se não houver erros de compilação encontrados por make .

    
por Digital Trauma 23.10.2015 / 06:57