为什么gcc只将它解释为单一选项?
我试图编译在PowerShell中GTK程序,这样我可以使用pkg配置的输入输出GCC但GCC走的是全输出作为一个单一的命令行选项和返回错误:为什么gcc只将它解释为单一选项?
gcc.exe: error: unrecognized command line option '-mms-bitfields -pthread -mms-bitfields -IC:/gtk/include/gtk-3.0 -IC tk/include/cairo -IC:/gtk/include -IC:/gtk/include/pango-1.0 -IC:/gtk/include/atk-1.0 -IC:/gtk/include/cairo -IC:/gtk clude/pixman-1 -IC:/gtk/include -IC:/msys/opt/include -IC:/msys/opt/include/freetype2 -IC:/msys/opt/include -IC:/msys t/include/libpng16 -IC:/gtk/include -IC:/gtk/include/freetype2 -IC:/gtk/include -IC:/gtk/include/libpng16 -IC:/gtk/in de/gdk-pixbuf-2.0 -IC:/gtk/include/libpng16 -IC:/gtk/include/glib-2.0 -IC:/gtk/lib/glib-2.0/include -LC:/gtk/lib -lgt -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32 -lz -lpangowin32-1.0 -lp ocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl'
我使用的命令行:
gcc hello.c -o hello $(pkg-config.exe --cflags --libs gtk+-3.0)
我也试过:
$(gcc hello.c -o hello $(pkg-config.exe --cflags --libs gtk+-3.0))
要么返回相同的结果。我该如何解决?
看起来,pkg-config.exe --cflags --libs gtk+-3.0
命令将其输出作为单行返回,因此在PowerShell中,它被解析为单个对象string
。当string
与空间(实际规则更复杂并且与版本相关)传递给本机应用程序时,PowerShell会尝试帮助并添加引号,因此它将被解释为单个参数。以防止它的方法之一是使用'--%'
“经营者”:
gcc hello.c -o hello '--%' $(pkg-config.exe --cflags --libs gtk+-3.0)
注意,它实际上不是--%
运营商,所以它不会使该行的其余部分被字面解释。其实这只是价值--%
的字符串。
发生“魔术”是因为当本机应用程序的PowerShell命令行构建器遇到--%
字符串时,它会禁用所有剩余参数的空格参数的自动引用。并且它还通过[Environment]::ExpandEnvironmentVariables
来解决%VariableName%
表单中的环境变量。
谢谢。这是构建gtk应用程序的巨大痛苦。此外,Win7只需要这种类型的修复(或痛苦的转换为'[string []]'),而Win10将使用pkg-config而没有问题。这会为我下次在窗户上时节省很多痛苦.... –
'gcc hello.c -o hello' - %'$(pkg-config.exe --cflags --libs gtk + -3.0)' – PetSerAl
工作很好,谢谢。您可以将其发布为答案,以便我可以接受。 – Jack