2017-10-28 228 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命令并在命令中替换输出。 –