C++ 直接从vim编译
我想编译不关闭vi的cpp文件。C++ 直接从vim编译,c++,vim,compilation,C++,Vim,Compilation,我想编译不关闭vi的cpp文件。 我知道《坚强》:!g++file.cpp但是我更喜欢:make,所以我在.vimrc文件中添加了这一行 au文件类型C集合makeprg=gcc\% au文件类型Cpp集makeprg=g++\% 但我不断地得到 “make:****未指定目标,未找到makefile。停止。**”消息。 谁能告诉我我的设置有什么问题吗? 我使用上面的选项成功编译。我认为如果您编写一个Makefile并将其放在vi可以找到的地方,会容易得多。我不确定您是否真的使用了vi(我只使用
我知道《坚强》:!g++file.cpp但是我更喜欢:make,所以我在.vimrc文件中添加了这一行
au文件类型C集合makeprg=gcc\%
au文件类型Cpp集makeprg=g++\% 但我不断地得到
“make:****未指定目标,未找到makefile。停止。**”消息。
谁能告诉我我的设置有什么问题吗?
我使用上面的选项成功编译。我认为如果您编写一个Makefile并将其放在vi可以找到的地方,会容易得多。我不确定您是否真的使用了vi(我只使用了Vim),但是当有Makefile编译时,应该像编写一样简单:make(不需要设置makeprg)。如果需要替换,请尝试以下方法:
set makeprg=gmake\ %:r.o
哦,这假设你有:
make -n <my_file>.o
顺便说一句,为了学习make,尤其是gmake,我建议看一看优秀的书《用gnumake管理项目》(managementprojectsandwithgnumake)()
嗯
干杯首先,制作血腥制作文件。每个工具都希望与make一起工作,如果您的编译非常简单,那么编写一个make文件将所有c和cpp文件编译成一个可执行文件大约需要30秒 第二,如果您拒绝使用make文件,请尝试
:help system
这应该会给你足够的信息,让你自己想出类似的命令
:com Mymake call system("g++ ".expand("%"))
我应该将C,Cpp更改为C,Cpp,然后它就可以正常工作了。
谢谢大家,尤其是罗伯·威尔斯,你的回答对我帮助很大。谢谢。我推荐一个名为SingleCompile的vim插件,而不是您所做的:
使用关键地图可以轻松实现 首先打开vimrc文件,并将这些行添加到该文件
autocmd filetype cpp nnoremap <F4> :!g++ % -ggdb -o %:r <CR>
autocmd filetype cpp nnoremap<F5> :!g++ % -ggdb -o %:r && ./%:r <CR>
autocmd文件类型cpp nnoremap:!g++%-ggdb-o%:r
autocmd文件类型cpp nnoremap:!g++%-ggdb-o%:r&/%:r
第一行将键F4映射到编译文件的。第二行将键F5映射到编译并运行
如果您经常使用gdb,那么这可能也很方便
autocmd filetype cpp nnoremap<F10> :!g++ % -ggdb -o %:r && gdb -tui %:r <CR>
autocmd文件类型cpp nnoremap:!g++%-ggdb-o%:r&&gdb-tui%:r
此行将键F10映射到编译并启动gdb
希望这有帮助。make在当前目录中搜索名为Makefile的文件。也许这就是问题所在?我自己也是一个makefile新手,所以这只是一个猜测。我不知道什么“au FileType CPP set makeprg”的内部操作,但我从另一台服务器编译w/o makefile。我不明白为什么我不能在我自己的计算机上编译,我使用的是我从未听说过的Ubuntu 8.10:MakeVi。这是vim的改进吗?谢谢你的回答。但是我使用编辑器来处理非常小的项目,比如ProjectEuler问题。所以每次我写代码的时候,生成Makefile都很烦人。这就是我尝试使用:make(直接编译)的原因。我发现了我的问题所在。这是关于C,Cpp的案例。我应该把它改成c,cpp。但是你的回答很有帮助。谢谢你。@Luc??或者$*.o是新的vim makeprg语法吗?$*不是新的&makeprg语法元素。它一直在那里(带有:make)。它将被make target替换。那么所需要的就是一个映射,它将使用当前的%并将
set
更改为setlocal
,以避免覆盖其他文件类型的默认设置。为什么您认为它比更好呢!g++%
?@MariusGedminas问得好。我想所有的反对票都是党派的,因为答案开头的废话,这很不专业,也不受欢迎P
autocmd filetype cpp nnoremap<F10> :!g++ % -ggdb -o %:r && gdb -tui %:r <CR>