1

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

在 vim 中,我想制作顶级 makefile 或子文件。我想在 vim 中查看我的错误,在一行上按 ENTER 以跳转到源代码行。

这适用于

make | copen

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

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

4

3 回答 3

2

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

一些编译器生成的消息由目录名组成,这些目录名必须附加在 %f 读取的每个文件名之前(例如:GNU make)。以下代码可用于扫描这些目录名称;它们将存储在内部目录堆栈中。 E379 %D "进入目录" 格式字符串;期望以下 %f 找到目录名称 %X “离开目录”格式字符串;预计以下 %f

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

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

于 2012-09-19T16:33:16.120 回答
0

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

:set makeprg=make\ -f\ /path/to/your/toplevel/makefile
于 2012-09-19T14:04:32.397 回答
0

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

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

就像是:

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

我相信您仍然应该在 :clist 中看到错误。

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

:make -C .. | copen
于 2012-09-19T14:49:10.020 回答