2017-10-28 3 views
0

Ich habe Fisch Shell als Standard-Shell auf meinem Fedora-Maschine installiert. Ich bin kürzlich zu nvim gewechselt und benutze deoplete-clang2 für die automatische Vervollständigung.Wie verwende ich compile_commands.json in der Fischschale?

Aber nur die Namen der Header-Dateien vervollständigen. Basierend auf dieser issue habe ich versucht, eine compile_commands.json Datei zu erstellen.

[ 
    { 
     "directory" : "/mnt/Work/Learn/Gtk/Official", 
     "command" : " /usr/bin/bash echo \"/usr/bin/clang (pkg-config --cflags gtk+-3.0) -o main main.c (pkg-config --libs gtk+-3.0)\"", 
     "file" : "/mnt/Work/Learn/Gtk/Official/main.c" 
    } 
] 

Aber wenn ich laufen clang-check main.c die Befehle die folgenden Fehler geworfen werden, um zu überprüfen.

error: unsupported option '--cflags' 
error: unsupported option '--libs' 
warning: (pkg-config: 'linker' input unused [-Wunused-command-line-argument] 
warning: gtk+-3.0): 'linker' input unused [-Wunused-command-line-argument] 
warning: (pkg-config: 'linker' input unused [-Wunused-command-line-argument] 
warning: gtk+-3.0): 'linker' input unused [-Wunused-command-line-argument] 
In file included from main.c:2: 
/usr/include/gtk-3.0/gtk/gtk.h:30:10: fatal error: 'gdk/gdk.h' file not found 
#include <gdk/gdk.h> 
     ^~~~~~~~~~~ 
1 error generated. 
Error while processing /mnt/Work/Learn/Gtk/Official/main.c. 

Wie kann ich das beheben? Danke

Antwort

1

Dies wird explizit ausgeführt bash, nicht Fisch.

"command" : " /usr/bin/bash echo \"[...] 

Sie können das ändern, indem Sie „/ usr/bin/Fisch“ statt bash (den Pfad einstellen, wenn das nicht ist, wo man Fisch installiert haben).

Alternativ müssen Sie nur die () zu $() ändern - das ist, wo der Fehler herkommt. command1 (command2 arg1 arg2) ist keine gültige Syntax in bash und wird nur unverändert an command1 übergeben (d. H., Es wird (command2, arg1 und arg2) als Argumente erhalten).

ändern es zu

"command" : " /usr/bin/bash echo \"/usr/bin/clang $(pkg-config --cflags gtk+-3.0) -o main main.c $(pkg-config --libs gtk+-3.0)\"" 

und es sollte funktionieren. (Beachten Sie die $ s)


Wenn Sie Fisch verwenden entscheiden, beachten Sie, dass pkg-config seinen Ausgang erwartet auf Räume aufgeteilt werden, welche Fische tun nicht (nur Zeilenumbrüche). Also würden Sie Rohr müssen es string split " ", wie

(pkg-config --libs gtk+-3.0 | string split " ") 
+0

wirft noch einen Fehler '' 'Warnung: echo: 'Linker' input ungenutzt [-Wunused-Befehlszeilenargument] Warnung:/usr/bin/clang $ (pkg-config --cflags gtk + -3.0) -o main main.c $ (pkg-config --libs gtk + -3.0): 'Linker' Eingabe unbenutzt [-Wunused-Kommandozeilenargument] Fehler: Kompilierung nicht möglich, erwartet genau einen Compilerjob in '' Fehler bei der Verarbeitung von /mnt/Work/Learn/Gtk/Official/main.c. '' ' –

+0

In diesem Fall sieht es so aus, als ob Ihr Aufruf kling falsch ist oder' pkg-config' nicht funktioniert. Versuchen Sie die 'pkg-config' Aufrufe in einem Terminal auszuführen und sehen Sie, ob die Ausgabe Ihren Erwartungen entspricht. Überprüfen Sie auch, ob das echo tatsächlich notwendig ist - ich weiß nicht, ob es sich um eine Endlosschleife handelt, daher bin ich mir nicht sicher, ob dies einen Befehl ausgibt, der ausgeführt werden soll, oder direkt der Befehl sein soll. Im letzteren Fall entfernen Sie das Echo. – faho

+0

pkg-config funktioniert perfekt onna-Terminal, und alles funktioniert wie erwartet, wenn ich den Befehl pkg-config manuell ausführen und die Ausgabe im Befehl ersetzen. –

Verwandte Themen