直接从vim编译

Sun*_*ong 14 c++ vim compilation

我想在没有关闭vi的情况下编译cpp文件.
我知道:!g ++ file.cpp但我更喜欢:make所以我在.vimrc文件中添加了这一行

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

但我一直得到
"make:*****没有指定目标,也没有找到makefile.停止.**"消息.
谁能告诉我我的设置有什么问题?
我用上面的选项成功编译.

Rob*_*lls 10

你需要在那里替换,尝试类似:

set makeprg=gmake\ %:r.o
Run Code Online (Sandbox Code Playgroud)

哦,这假设你有:

  1. 目录中的(M | m)akefile,或
  2. 默认的SUFFIX规则适用于您的环境(看起来没有)

输入以下内容检查默认值:

make -n <my_file>.o
Run Code Online (Sandbox Code Playgroud)

并看看这是否给你一些明智的东西.

如果在另一个位置存在makefile,则可以添加-f选项以指向makefile,例如:

set makeprg=gmake\ -f\ ../some_other_dir/makefile\ %:r.o
Run Code Online (Sandbox Code Playgroud)

顺便说一句,为了学习make,尤其是gmake,我建议你看一本优秀的书"使用GNU Make管理项目"(清理亚马逊链接).

HTH.

干杯


Sun*_*ong 6

我应该将C,Cpp改为c,cpp,然后才能正常工作.

谢谢大家,特别是Rob Wells,你的回答对我很有帮助.谢谢.


Jon*_*nas 5

我认为如果你编写一个Makefile并把它放在vi可以找到它的地方会容易得多.我不确定你是否真的使用vi(我只使用过Vim),但是当有一个Makefile编译时应该像写一样简单:make(不需要set makeprg).


pad*_*t27 5

它可以通过使用键映射轻松实现。

首先打开你的 vimrc 文件和文件中的这些行,

autocmd filetype cpp nnoremap <F4> :!g++ % -ggdb -o %:r <CR>
autocmd filetype cpp nnoremap<F5> :!g++ % -ggdb -o %:r && ./%:r <CR>
Run Code Online (Sandbox Code Playgroud)

第一行将键 F4 映射到编译文件。第二行将键 F5 映射到compile 和 run

如果您经常使用 gdb,那么这也可能会派上用场。

autocmd filetype cpp nnoremap<F10> :!g++ % -ggdb -o %:r && gdb -tui %:r <CR>
Run Code Online (Sandbox Code Playgroud)

这一行映射了 F10 键来编译和启动 gdb

希望这可以帮助。