nvim Falscher Pfad vom Compilerfeher in output buffer

OP #7981192
Lesenswert?

Hallo, ich habe ein Problem, wenn ich in nvim mein Projekt baue und es dann zu compilerfehler kommt.

Ich habe einen Ordner wo der Code an für sich drinn liegt und parallel eine Ordner, wo die Makefile drinn liegt.

1
HAL
2
  - .git
3
  - _build
4
  - APPL
5
    - SBC
6
    - BUTTON
7
    - ...
8
  - doc
9
  - Project
10
  - ...

in nvim habe ich mir verschiedene Pfadvariablen angelegt

1
            let s:project = "HAL"
2
            let g:prHome="C:/Work/Project/HAL"
3
            let g:pr1="C:/Work/Project/HAL"
4
            let g:pr2="C:/Work/Project/HAL"
5
            let g:pr3="C:/Work/Project/HAL/Project"
6
            let g:pr4=""
7
            set tags=C:/Work/Project/HAL/.ctags

wobei in g:pr3 die Makefile liegt.

Wenn ich jetzt das Projekt baue, rufe ich folgende Funktion auf

1
function! DoRebuildBatchFile(...)
2

3
    cclose
4
    echo "build " g:projectName
5

6
    "save the current working directory so we can come back
7
    let l:starting_directory = getcwd()
8

9
    execute("cd " . g:pr3)
10
    " set build parameter
11
    set makeprg=rebuild.bat
12
    for item in a:000
13
        if (item == "wheel")
14
            set makeprg+=\ wheel
15
        elseif (item == "debug")
16
            set makeprg+=\ debug
17
        endif
18
    endfor
19

20
    "Async
21
    Dispatch
22
     "" Open the output buff
23
    echo 'Build started'
24
     "reset directory
25
    execute "cd " . l:starting_directory
26
endfunction

Damit wird mein Projekt gebaut. Wenn ich jetzt aber einen Compilerfeher habe, bekomme ich im output buffer z.b.

1
|| ../../APPL/SBC/spi_TLE94x1_SBC.c: In function 'sbcInit_s32':
2
..\..\APPL\SBC\spi_TLE94x1_SBC.c|70 col 5| error: unknown type name 'SBC_ErrorCode'
3
||      SBC_ErrorCode errCode;

Wenn ich nun auf dem Error klicke, öffnet sich ein leerer Tab. Das passiert, da der Pfad falsch ist (gehe ich zumindest von aus). von meinem Home-Verzeichnis liegt der Fehler in

1
APPL/SBC/spi_TLE94x1_SBC.c: In function 'sbcInit_s32':

von dem Verzeichnis, wo die Makefile liegt, liegt die Datei

1
../APPL/SBC/spi_TLE94x1_SBC.c: In function 'sbcInit_s32':

Wie bekomme ich es hin, dass mir der richtige Pfad angezeigt wird?

Momentan suche ich immer nach der Datei, öffne diese und springe dann zur zeile die mir angegeben wird. Schöner ist es aber, wenn ich direkt auf den Fehler klicken kann und dann direkt zur richtigen Stelle hinspringe.

Persönliche Seite #7981201
Lesenswert?

Chandler B. schrieb:

parallel eine Ordner, wo die Makefile drinn liegt.

Das ist halt eher unüblich; wenn das Makefile im selben Ordner wie der Quelltext liegt, oder einem übergeordneten Ordner, braucht das Makefile keine Pfade der Form "../" zu enthalten.

Chandler B. schrieb:

Wie bekomme ich es hin, dass mir der richtige Pfad angezeigt wird

Ich würde nicht versuchen die Anzeige zu ändern. An Compiler-Ausgaben herumzupfuschen führt nur zu Ärger...

Du könntest die Pfade im Makefile absolut an den Compiler übergeben (Pfad des Makefile ermitteln und vorne dran hängen), dann dürfte die Ausgabe auch absolute Pfade beinhalten. Ich meine CMake macht das automatisch genau so.

Ansonsten im Editor einstellen, dass die Pfade relativ zum Ordner mit dem Makefile zu verstehen sind.

#7981214
Lesenswert?

Chandler B. schrieb:

Wenn ich nun auf dem Error klicke, öffnet sich ein leerer Tab. Das passiert, da der Pfad falsch ist (gehe ich zumindest von aus). von meinem Home-Verzeichnis liegt der Fehler in

1
> APPL/SBC/spi_TLE94x1_SBC.c: In function 'sbcInit_s32':
2
>

von dem Verzeichnis, wo die Makefile liegt, liegt die Datei

1
> ../APPL/SBC/spi_TLE94x1_SBC.c: In function 'sbcInit_s32':

Wie bekomme ich es hin, dass mir der richtige Pfad angezeigt wird?

D.h. du bist im Quickfix von vim (:copen, :cn, :cp usw. ...)?

Gib in deinem vim

:help quickfix-directory-stack

ein. Das beschreibt wie quickfix Verzeichnisse trackt (über jenen Stack). In Kurzform: Der quickfix directory stack wird zum Suchen von Dateien verwendet. quickfix erwartet, um den Stack zu bauen, dass Makefiles eine Meldung mit absolutem Pfad ausgeben wenn sie ein Verzeichnis betreten und eine einfache Meldung wenn sie es verlassen.

Beispiel aus der Doku für erwartete Meldungen:

1
Examples for Makefiles:
2

3
Unix:
4
    libs:
5
      for dn in $(LIBDIRS); do        \
6
    (cd $$dn; echo "Entering dir '$$(pwd)'"'; make); \
7
    echo "Leaving dir";        \
8
      done
9

10
Add
11
    %DEntering\ dir\ '%f',%XLeaving\ dir
12
to your 'errorformat' to handle the above output.

Beachte den Teil dass du je nach gewähltem Text noch "errorformat" anpassen musst.

: Bearbeitet durch User

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren