我的c ++项目由多个目录组成,每个目录都有自己的makefile。升级一级我还有一个顶级makefile,按顺序调用其他的。
从vim中我想制作顶级makefile或者一个子级makefile。我希望在vim中看到我的错误,按一行上的ENTER跳转到源代码行。
这可以使用
make | copen
但一次只能有一个目录。错误窗口中列出的文件名只是一个名称,没有路径。如果您尝试构建顶级makefile并在文件名/行号上按ENTER,则它不知道该文件的路径。
有解决方法吗?我想从vim内部构建顶级makefile,无论错误在哪个目录中,都要跳转到正确的文件。问题可能是g ++只输出文件的名称,而不是路径。
答案 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