2017-09-30 49 views
1

我试图编译在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)) 

要么返回相同的结果。我该如何解决?

+1

'gcc hello.c -o hello' - %'$(pkg-config.exe --cflags --libs gtk + -3.0)' – PetSerAl

+0

工作很好,谢谢。您可以将其发布为答案,以便我可以接受。 – Jack

回答

2

看起来,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%表单中的环境变量。

+0

谢谢。这是构建gtk应用程序的巨大痛苦。此外,Win7只需要这种类型的修复(或痛苦的转换为'[string []]'),而Win10将使用pkg-config而没有问题。这会为我下次在窗户上时节省很多痛苦.... –

相关问题