2009-02-12 10 views
14

Mi piacerebbe compilare file cpp senza spegnere.
So che il : g ++ file.cpp ma preferisco : fare così ho aggiunto questa riga nel file di Vimrc
compilare direttamente da vim

au FileType C impostato makeprg = gcc \%
au FileType Cpp set makeprg = g ++ \%

ma continuo a ricevere
"fanno: ***** non ci sono obiettivi specifici e non makefile trovato Fermare **.." il messaggio.
qualcuno può dirmi cosa c'è che non va nelle mie impostazioni?
Io uso per compilare correttamente con l'opzione sopra.

+1

effettua ricerche in un file chiamato Makefile nella directory corrente. Potrebbe essere questo il problema? Sono un debuttante newbie anch'io, quindi è solo una supposizione. – Srikanth

+0

Non conosco l'azione interna di cosa "au FileType CPP set makeprg" ma compile w/o Makefile da un altro server. Non capisco perché non riesco a compilare nel mio computer Sto usando Ubuntu 8.10 –

+0

Non ho mai sentito parlare di: make riguardo a vi. È un miglioramento di Vim? – mouviciel

risposta

6

dovrei cambiare C, Cpp in c, cpp, quindi funziona correttamente.

grazie a tutti, specialmente a Rob Wells, la vostra risposta mi ha aiutato molto. grazie.

+1

Cambiate anche 'set' in' setlocal' per non sovrascrivere le impostazioni di default per altri tipi di file. – ZyX

5

Penso che sia molto più semplice se scrivi un Makefile e lo metti dove vi può trovarlo. Non sono sicuro che tu usi effettivamente vi (ho solo usato Vim), ma quando c'è una compilazione di Makefile dovrebbe essere facile come scrivere : make (non è necessario impostare makeprg).

+0

grazie per la risposta. ma io uso l'editor per progetti molto piccoli come i problemi del progetto euler. quindi ogni volta che scrivo un codice, rendere Makefile è piuttosto irritante. è per questo che sto cercando di usare: make (compilazione diretta). –

10

È necessario la sostituzione lì, provare qualcosa di simile:

set makeprg=gmake\ %:r.o 

Oh, questo presuppone che hai:

  1. un (M | m) akefile nella directory, o
  2. regole predefinite di suffisso sono disponibili per l'ambiente (che sembra che non ci sono)

Controllare f o l'impostazione predefinita immettendo:

make -n <my_file>.o 

e vedere se questo ti dà qualcosa di sensato.

Se c'è un makefile in un'altra posizione è possibile aggiungere l'opzione -f per puntare al Makefile, per esempio:

set makeprg=gmake\ -f\ ../some_other_dir/makefile\ %:r.o 

BTW Per conoscere marca, e soprattutto gmake, io suggerirei avere uno sguardo all'eccellente libro "Gestire i progetti con GNU Make" (sanitised Amazon link).

HTH.

evviva

+0

Ho scoperto qual era il mio problema. si trattava del caso di C, Cpp. Dovrei cambiarlo in c, cpp. ma la tua risposta è stata molto utile. Grazie. –

+0

@Luc, ?? O è $ *. O una nuova sintassi vpr makeprg? –

+0

$ * non è un nuovo elemento di sintassi makeprg. È sempre stato lì (con: make). Sarà rimpiazzato con make target. Tutto è quindi necessario, è una mappatura che utilizzerà la corrente%

-5

Prima di tutto, basta fare il file di make maledetto. Ogni strumento là fuori si aspetta di lavorare con make e se le tue compilation sono così semplici ci vogliono circa 30 secondi per scrivere un make file che compila tutti i file c e cpp in un eseguibile.

In secondo luogo, se si rifiutano di utilizzare un file make quindi provare

:help system 

Questo dovrebbe darvi abbastanza informazioni per venire con il proprio comando simile a questo

:com Mymake call system("g++ ".expand("%")) 
+4

Perché pensi che sia meglio di ':! G ++%'? –

+2

@MariusGedminas Buona domanda. E immagino che tutti i voti negativi siano parte a causa della seccatura all'inizio della risposta, che è poco professionale o benvenuta su SO. : P –

2

Può essere facilmente realizzata mediante l'utilizzo di mappe chiave.

Prima aprire il file vimrc e queste righe al file,

autocmd filetype cpp nnoremap <F4> :!g++ % -ggdb -o %:r <CR> 
autocmd filetype cpp nnoremap<F5> :!g++ % -ggdb -o %:r && ./%:r <CR> 

La prima riga mappe il tasto F4 per preparazione della documentazione. La seconda riga esegue il mapping del tasto F5 su ed esegue.

Se si utilizza gdb frequentemente, questo può anche essere utile.

autocmd filetype cpp nnoremap<F10> :!g++ % -ggdb -o %:r && gdb -tui %:r <CR> 

Questa linea mappe F10 chiave per compilazione e avviare gdb

Spero che questo aiuti.