我在我的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.
那么我该如何解决这个问题呢。感谢
答案 0 :(得分:1)
这是明确执行 bash ,而不是fish。
"command" : " /usr/bin/bash echo \"[...]
你可以使用&#34; / usr / bin / fish&#34;来改变它。而不是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)
如果您决定使用鱼,请注意pkg-config
期望其输出在空格上分割,鱼不做(仅限换行)。因此,您需要将其发送到string split " "
,例如
(pkg-config --libs gtk+-3.0 | string split " ")