我正在使用gvim来编码c ++。由于我的程序涉及cmake,因此我的源位于与构建不同的目录中。
我如何仍然可以调用:从vim中制作,以便找到构建目录中的正确make文件?
然后我怎么能用相同的命令行样式和一次击键来启动我的应用程序?
答案 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
,没有简洁的方法来忽略这种噪音。到目前为止,我后处理cmake
和ctest
输出以删除^\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++ 并清除控制台