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

如何在fish shell中使用compile_commands.json?,shell,compiler-errors,gtk,clang,fish,Shell,Compiler Errors,Gtk,Clang,Fish,我已将fish shell安装为fedora机器上的默认shell。我最近切换到nvim,我正在使用deoplete-clang2进行自动完成 但它只是完成头文件的名称。基于此,我尝试创建一个compile_commands.json文件 但是当我运行clangcheckmain.c来验证命令时,会抛出以下错误 error: unsupported option '--cflags' error: unsupported option '--libs' warning: (pkg-config:

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

但它只是完成头文件的名称。基于此,我尝试创建一个compile_commands.json文件

但是当我运行clangcheckmain.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.

那么我该如何解决这个问题呢。谢谢

这是显式执行bash,而不是fish

"command" : " /usr/bin/bash echo \"[...]
如果没有安装fish,可以使用/usr/bin/fish而不是bash来更改路径

或者,您只需要将更改为$-这就是错误的来源。command1 command2 arg1 arg2在bash中不是有效的语法,将按原样传递给command1,即它将接收command2、arg1和arg2作为其参数

换成

"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

如果您确实决定使用fish,请注意pkg config希望其输出在空格上拆分,而fish不只是换行。所以你需要用管道把它连接到string split,比如


仍然抛出错误警告:echo:'linker'input unused[-Wunused command line argument]警告:/usr/bin/clang$pkg config-cflags gtk+-3.0-o main.c$pkg config-libs gtk+-3.0:'linker'input unused[-Wunused command line argument]错误:无法处理编译,在处理/mnt/Work/Learn/Gtk/Official/main.c时,预期只有一个编译器作业出错。在这种情况下,看起来您的叮当调用是错误的,或者pkg配置不起作用。尝试在终端中执行pkg config调用,看看输出是否与预期相符。还要检查是否确实需要回显-我不知道deoplete,所以我不确定这是否应该打印要执行的命令,还是直接作为命令。在后一种情况下,remove-echo.pkg-config在NA终端上工作得非常好,如果我手动运行pkg-config命令并替换命令中的输出,一切都会正常工作。
"command" : " /usr/bin/bash echo \"/usr/bin/clang $(pkg-config --cflags gtk+-3.0) -o main main.c $(pkg-config --libs gtk+-3.0)\""
(pkg-config --libs gtk+-3.0 | string split " ")