在vim

时间:2017-04-24 08:10:33

标签: vim makefile compilation cmake

我正在使用gvim来编码c ++。由于我的程序涉及cmake,因此我的源位于与构建不同的目录中。

我如何仍然可以调用:从vim中制作,以便找到构建目录中的正确make文件?

然后我怎么能用相同的命令行样式和一次击键来启动我的应用程序?

3 个答案:

答案 0 :(得分:2)

TD; LR:只需将'cd "compi/dir" && make $*'分配给&makeprg:let)并运行:make youroptionaltarget -j 4

在另一个Q/A中,我已经批评了:!make方法。这就是我们20年前用vi做的事情。 Vim通过quickfix模式引入了集成编译。请学习vim编译代码的方法。

在CMake案例中,我们确实可以使用cmake --someoption compil/dir进行编译。当我用VC ++编译的VC ++编译器从vim编译时,我使用它。其余的时间,我宁愿避免使用它,因为它会使每一行都加上number>来破坏编译器输出,从而打破了vim quickfix功能。不幸的是,通过调整&errorformat,没有简洁的方法来忽略这种噪音。到目前为止,我后处理cmakectest输出以删除^\d+>

因此。什么可以,而且我们真的应该做什么?我们应该利用vim quickfix功能。这是通过调整&makeprg&efm选项来完成的。在你的情况下,第一个就足够了。用它来更改目录并执行make。最后使用:make进行编译,并使用:cn:cp:cc等导航错误。

如果你还想在后台编译,你需要一个知道如何在一个不是当前目录的后台编译的插件。这是我宣传我提供这些功能的build-tool-wrappers plugin以及一些与CMake相关的功能的地方。

PS:也可以使用make(和忍者)-c参数。

答案 1 :(得分:0)

我想出的最简单的解决方案如下:

:! (cd /path/to/your/cmake/build/directory; make)

要同时执行该程序,您可以使用;&&附加命令:

:! (cd /path/to/your/cmake/build/directory; make && ./myProgram)

this page中,您可以找到一个教程如何绑定它,以便在一次击键中执行此操作。

<强>解释

在vim中,您可以使用:! command执行任何命令(例如,:! ls)。 使用(cd [...]; [...]),通过创建子shell并在子shell中更改为此目录,指定执行目录不同。

答案 2 :(得分:0)

您可以使用以下内容:

autocmd filetype cpp nnoremap <F8> :w<CR> :!clear<CR> :!make && ./%<<CR>

这将允许您使用带有 <F8> 的 Makefile 编译/运行 C++ 并清除控制台