Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 直接从vim编译_C++_Vim_Compilation - Fatal编程技术网

C++ 直接从vim编译

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(我只使用

我想编译不关闭vi的cpp文件。
我知道《坚强》:!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
哦,这假设你有:

  • 目录中的(M | M)文件,或
  • 默认后缀规则适用于您的环境(看起来没有)
  • 通过输入以下内容检查默认值:

    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>