Quando compilo un codice in C++, per renderlo eseguibile (ed eseguirlo) quello che scrivo è:

g++ -std=c++11 -o [nomeEseguibile] [nomeFile].C && ./[nomeEseguibile]

Vorrei poter fissare su ~/.bashrc una funzione g++ che

  • dato

    g++ [nome1]
    

    su terminale, compili (ovviamente con lo standard 2011) il file chiamato nome1 e lo esegua in caso di successo.

  • dato

    g++ [nome1][nome2]
    

    compili [nome2] e chiami l'eseguibile [nome1]

  • dato

    g++ [nome1] [nome2] args [nomeJ]...[nomeN]
    

    compili [nome2] creando l'eseguibile [nome1] che riceva come argomenti (i quali finiscono nel main del programma, per chi sa di cosa parlo) le cose scritte dopo la formuletta magica appena inventata args.

Ovviamente voglio che funzioni anche:

g++ [nome1] args [nomeJ] ... [nomeN]

senza che sia specificato il nome dell'eseguibile, che sarebbe a.out di default.

È possibile?

chiesto 11 Sep '14, 21:21

airordl's gravatar image

airordl
407596876

modificato 12 Sep '14, 16:13

enzotib's gravatar image

enzotib ♦♦
14.1k113187

anche solo la prima richiesta sarebbe gran cosa

(11 Sep '14, 21:28) airordl airordl's gravatar image

Ecco una funzione che dovrebbe fare quello che chiedi (secondo i miei test).
Non ho potuto chiamarla g++ perché non è un nome accettabile per una funzione (anche se si potrebbe ovviare a questa cosa con uno script, mentre la funzione sotto basta aggiungerla a ~/.bashrc come richiesto).

gpp() {
    local nome1="$1"; shift
    local nome2="$1"; shift
    if [[ ! "$nome1" ]]; then
        echo "Manca il primo parametro" >&2
        return 1
    fi
    if [[ ! "$nome2" ]]; then
        g++ -std=c++11 -o "$nome1" "$nome1".C && ./"$nome1"
    elif [[ "$nome2" == "args" ]]; then
        g++ -std=c++11 -o "$nome1" "$nome1".C && ./"$nome1" "$@"
    else
        if [[ "$1" == "" || "$1" == "args" ]]; then
            shift
        else
            echo "Parametri non attesi" >&2
            return 1
        fi
        g++ -std=c++11 -o "$nome1" "$nome2".C && ./"$nome1" "$@"
    fi
}
coll. permanente

ha risposto 11 Sep '14, 21:55

enzotib's gravatar image

enzotib ♦♦
14.1k113187

mooolto figo, faccio alcuni test e ti riempio di altre domande. grazie mille!

(11 Sep '14, 22:10) airordl airordl's gravatar image

complimenti

(12 Sep '14, 18:35) airordl airordl's gravatar image

come posso imparare a cavarmela da solo con queste cose?

(12 Sep '14, 18:40) airordl airordl's gravatar image
1

@airordl: domanda da un milione di dollari :) Devi avere pratica con la programmazione (e se stai usando C++ ce l'hai o l'acquisirai) e poi devi studiare e usare bash.
Se la risposta ti soddisfa, accettala, grazie.

(12 Sep '14, 19:00) enzotib ♦♦ enzotib's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×171
×105
×36
×33

domanda posta: 11 Sep '14, 21:21

domanda visualizzata: 1,799 volte

ultimo aggiornamento: 12 Sep '14, 19:00

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.