Kompiluj bezpośrednio z Vima

Chciałbym skompilować plik cpp bez wyłączania vi.
Znam :!plik g++.cpp ale ja wolę : make więc dodałem ten wiersz w .plik vimrc

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

But I keep getting
"make: * * * * * Nie określono żadnych celów i nie znaleziono pliku makefile. Przestań.** "wiadomość.
czy ktoś może mi powiedzieć, co jest nie tak z moim ustawieniem?
Używam do kompilacji z opcją powyżej.

Author: Ionică Bizău, 2009-02-12

6 answers

Potrzebujesz zastąpienia, spróbuj czegoś takiego:

set makeprg=gmake\ %:r.o

OH, to zakłada, że masz:

  1. A (M / M)akefile w katalogu, lub
  2. domyślne reguły przyrostków są dostępne dla Twojego środowiska (a wygląda na to, że ich nie ma)

Sprawdź wartość domyślną wpisując:

make -n <my_file>.o
I zobacz, czy to da ci coś sensownego.

Jeśli plik makefile znajduje się w innej lokalizacji, możesz dodać opcję-f, aby wskazać na plik makefile, dla przykład:

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

BTW za poznanie make, a szczególnie gmake, proponuję zajrzeć do znakomitej książki " Managing Projects with GNU Make "().

HTH.

Cheers

 10
Author: Rob Wells,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-12 10:35:38

Powinienem zmienić C, Cpp na C, cpp, wtedy będzie dobrze.

dziękuję wszystkim, szczególnie Rob Wells , twoja odpowiedź Bardzo mi pomogła. dziękuję.

 6
Author: Sungwon Jeong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-10 03:29:13

Myślę, że będzie o wiele łatwiej, jeśli napiszesz Makefile i umieścisz go tam, gdzie vi go znajdzie. Nie jestem pewien, czy faktycznie używasz vi (używałem tylko Vima), ale gdy istnieje plik Makefile kompilowanie powinno być tak proste, jak napisanie : make (nie jest potrzebny zestaw makeprg).

 5
Author: Jonas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-12 10:26:12

Polecam wtyczkę Vim o nazwie SingleCompile zamiast tego, co zrobiłeś: http://www.vim.org/scripts/script.php?script_id=3115

 2
Author: user480776,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-19 17:19:39

Można go łatwo osiągnąć za pomocą kluczowych map.

Najpierw otwórz plik vimrc i te linie do pliku,

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

Pierwsza linia mapuje klucz F4 do kompilując plik . Druga linia mapuje klucz F5 do skompilować i uruchomić .

Jeśli często używasz gdb, może się to również przydać.

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

Ta linia mapuje klucz F10 do skompiluj i uruchom gdb

Mam nadzieję, że to pomoże.
 2
Author: padfoot27,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-27 14:49:28

Po pierwsze, zrób ten cholerny plik. Każde narzędzie oczekuje pracy z make i jeśli Twoje Kompilacje są tak proste, potrzeba około 30 sekund, aby napisać plik make, który kompiluje wszystkie pliki C i cpp do pliku wykonywalnego.

Po drugie, jeśli odmówisz użycia pliku make, spróbuj

:help system

To powinno dać ci wystarczająco dużo informacji, aby wymyślić własną komendę podobną do tej

:com Mymake call system("g++ ".expand("%"))
 -5
Author: Whaledawg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-12 22:17:35