如何在fish shell中使用compile_commands.json?

时间:2017-10-28 16:05:16

标签: shell compiler-errors gtk clang fish

我在我的fedora机器上安装了fish shell作为默认shell。我最近切换到nvim,我正在使用deoplete-clang2进行自动完成。

但它只是填写了头文件的名称。因此,基于此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 个答案:

答案 0 :(得分:1)

这是明确执行 bash ,而不是fish。

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

你可以使用&#34; / usr / bin / fish&#34;来改变它。而不是bash(调整路径,如果那不是你安装鱼的地方)。

或者,您只需将()更改为$() - 即错误的来源。 command1 (command2 arg1 arg2)在bash中不是有效的语法,只会按原样传递给command1(即它会接收(command2arg1arg2)作为其论点。)

将其更改为

"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 " ")