Убедитесь, что ваш make-файл сообщает, когда он входит и выходит из подкаталогов, как показано ниже:
make[1]: Entering directory `/home/username/projects/projectname/subdir1'
[... compile commands ...]
make[1]: Leaving directory `/home/username/projects/projectname/subdir1'
По моему опыту, vim будет анализировать эту часть вывода, чтобы найти правильные пути для файлов сошибки.Кроме того, по моему (разочарованному) опыту, полученному несколько лет назад, vim без сообщений не знает, где искать файлы, на которые ссылаются сообщения об ошибках.
Обратите внимание, что это работает даже при рекурсивном построении подкаталогов, так какв этом примере:
make[1]: Entering directory `/home/username/projects/projectname/subdir1'
make[2]: Entering directory `/home/username/projects/projectname/subdir1/blah'
[... compile commands ...]
make[2]: Leaving directory `/home/username/projects/projectname/subdir1/blah'
make[1]: Leaving directory `/home/username/projects/projectname/subdir1'