vim中的递归makefile < >我的C++项目由多个目录组成,每个目录都有自己的Mag文件。上一级,我还有一个顶级makefile,它按顺序调用其他的makefile

vim中的递归makefile < >我的C++项目由多个目录组成,每个目录都有自己的Mag文件。上一级,我还有一个顶级makefile,它按顺序调用其他的makefile,vim,g++,makefile,Vim,G++,Makefile,在vim中,我想创建顶级makefile或子makefile。我想在vim中看到我的错误,在一行上按ENTER键跳转到源代码行 这是使用 make|copen 但一次只有一个目录。错误窗口中列出的文件名只是一个名称,没有路径。如果您尝试构建顶级makefile并按ENTER键输入文件名/行号,则它不知道文件的路径 有办法解决这个问题吗?我想从vim中构建顶级makefile,无论错误在哪个目录中,都可以跳转到正确的文件。问题可能是g++只输出文件名,而不输出路径。您可以给Vim一个自定义命令来执

在vim中,我想创建顶级makefile或子makefile。我想在vim中看到我的错误,在一行上按ENTER键跳转到源代码行

这是使用

make|copen

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


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

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

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

您可以在vim中创建到以下内容的映射

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

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

'errorformat'
有一个内置的机制;from
:help errorformat

某些编译器生成由目录名组成的消息,这些目录名必须 在%f读取的每个文件名前面加上前缀(例如:GNU make)。以下 代码可用于扫描这些目录名;它们将存储在一个容器中 内部目录堆栈。E379 %D“输入目录”格式字符串;期待着一个追随者 %查找目录名的 %X“离开目录”格式字符串;需要以下%f

定义“输入目录”或“离开目录”格式时,“%D”或 “%X”必须在该子字符串的开头给出。Vim跟踪目录 更改当前目录,并将其前置到使用 相对路径。请参阅| quickfix目录堆栈|了解详细信息、提示和提示 限制


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

我尝试了这个,然后打开其中一个子文件并“make | copen”。错误列表包含一个没有目录的文件名,因此它不会打开现有的文件,而是一个新的空文件。我需要熟悉errorformat,所以目前正在寻找一些好的阅读方法。开始阅读vim帮助,很快就迷路了。当我理解了这些信息后,我会向你汇报。如果你不想自己输出这些信息,
make-w