vim中的递归makefile

时间:2012-09-19 13:50:19

标签: vim g++ makefile

我的c ++项目由多个目录组成,每个目录都有自己的makefile。升级一级我还有一个顶级makefile,按顺序调用其他的。

从vim中我想制作顶级makefile或者一个子级makefile。我希望在vim中看到我的错误,按一行上的ENTER跳转到源代码行。

这可以使用

make | copen

但一次只能有一个目录。错误窗口中列出的文件名只是一个名称,没有路径。如果您尝试构建顶级makefile并在文件名/行号上按ENTER,则它不知道该文件的路径。

有解决方法吗?我想从vim内部构建顶级makefile,无论错误在哪个目录中,都要跳转到正确的文件。问题可能是g ++只输出文件的名称,而不是路径。

3 个答案:

答案 0 :(得分:2)

'errorformat'内置了一种机制;来自:help errorformat

  

某些编译器会生成包含必须的目录名的消息   预先添加到%f读取的每个文件名(例如:GNU make)。下列   代码可用于扫描这些目录名称;它们将存储在一个   内部目录堆栈。 E379     %D“输入目录”格式字符串;期待以下               %f找到目录名称     %X“离开目录”格式字符串;期待以下%f

     

定义“输入目录”或“离开目录”格式时,“%D”或   必须在该子字符串的开头给出“%X”。 Vim跟踪目录   将当前目录更改并预先添加到使用a找到的每个错误文件   相对路径。见| quickfix-directory-stack |有关详细信息,提示和   限制。

因此,您需要让Makefile输出这些“更改目录”消息,并确保通过'errorformat'设置正确解析它们。

答案 1 :(得分:0)

你可以给Vim一个自定义命令来执行:make

:set makeprg=make\ -f\ /path/to/your/toplevel/makefile

答案 2 :(得分:0)

您可以在vim中创建以下内容的地图

!find .. -type d -exec make -C {} \;

类似的东西:

map  <F12>    <esc>:!find .. -type d -exec make -C {} \;<cr>

我相信你仍然应该看到:clist中的错误。

如果要运行上层make文件,可以执行以下操作:

:make -C .. | copen