2017-09-30 84 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而沒有問題。這會爲我下次在窗戶上時節省很多痛苦.... –

相關問題