Forum: PC-Programmierung nvim Falscher Pfad vom Compilerfeher in output buffer


von Chandler B. (chandler)


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.

von Niklas G. (erlkoenig) Benutzerseite


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.

von Hannes J. (pnuebergang)


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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.