2017-10-28 182 views
0

我的魚殼安裝爲我的fedora機器上的默認外殼。我最近切換到nvim,並使用deoplete-clang2進行自動完成。如何在魚殼中使用compile_commands.json?

但它只是完成頭文件的名稱。所以基於這個issue我試着創建一個compile_commands.json文件。

[ 
    { 
     "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" 
    } 
] 

但是,當我運行clang-check main.c來驗證命令時會拋出以下錯誤。

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. 

那麼如何解決這個問題。謝謝

回答

1

這是明確執行bash,而不是魚。

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

您可以通過使用「在/ usr/bin中/魚」,而不是慶典(調整路徑,如果您已經安裝了的魚,這不是)改變這種狀況。

或者,您只需要將()更改爲$() - 這就是錯誤來自的地方。 command1 (command2 arg1 arg2)在bash中不是有效的語法,並且將僅按原樣傳遞給command1(即它將接收(command2,arg1arg2)作爲其參數)。

將其更改爲

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

,它應該工作。 (注意$ S)


如果你決定使用魚,注意pkg-config預計其輸出對空間進行分割,這魚不這樣做(只換行)。所以,你需要管它string split " ",像

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

仍然拋出一個錯誤'''警告:回聲:「連接」輸入未使用[-Wunused的命令行參數的] 警告:在/ usr/bin/clang $(pkg-config --cflags gtk + -3.0)-o main main.c $(pkg-config --libs gtk + -3.0):'linker'input unused [-Wunused-command-line-argument] 錯誤:無法處理編譯,預計在處理/mnt/Work/Learn/Gtk/Official/main.c時出現' 錯誤中的一個編譯器作業。 ''' –

+0

在這種情況下,它看起來像您的clang調用錯誤或者'pkg-config'不起作用。嘗試在終端中執行'pkg-config'調用,看看輸出是否符合您的期望。還要檢查'echo'是否真的有必要 - 我不知道deoplete,所以我不確定這是否應該打印一個要執行的命令或直接命令。在後一種情況下,刪除'echo'。 – faho

+0

pkg-config完美地運行在終端上,並且一切都按預期工作,如果我手動運行pkg-config命令並在命令中替換輸出。 –