Frage

Ich versuche, Cygwin als Build-Umgebung unter Windows zu verwenden. Ich habe einige Abhängigkeiten von 3rd-Party-Paketen, zum Beispiel, GTK +.

Normalerweise, wenn ich unter Linux zu bauen, in meinem Makefile kann ich einen Aufruf an pkg-config als Argument an gcc hinzufügen, so dass es kommt in etwa so:

gcc example.c `pkg-config --libs --cflags gtk+-2.0` 

Dies funktioniert unter Linux, aber in Cygwin ich:

:Invalid argument
make: *** [example] Error 1

Im Moment bin ich nur manuell ausgeführt pkg-config und Einfügen der Ausgabe in das Makefile, die wirklich schrecklich. Gibt es eine gute Möglichkeit für dieses Problem zu umgehen oder zu beheben?

Jetzt ist nicht der Schuldige. Ich kann über die Befehlszeile kopieren und einfügen, die Anwendungen machen gcc zu nennen, und das allein wird gcc laufen, die mit stoppt „: Invalid argument“.

schrieb ich ein kleines Testprogramm auszudrucken Argumente Befehlszeile:

for (i = 0; i < argc; i++)
    printf("'%s'\n", argv[i]);

Beachten Sie die einfachen Anführungszeichen.

$ pkg-config --libs gtk+-2.0
-Lc:/mingw/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpang
owin32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-
2.0 -lglib-2.0 -lintl

Beim Laufen durch das Testprogramm:

$ ./t `pkg-config --libs gtk+-2.0`
'C:\cygwin\home\smo\pvm\src\t.exe'
'-Lc:/mingw/lib'
'-lgtk-win32-2.0'
'-lgdk-win32-2.0'
'-latk-1.0'
'-lgdk_pixbuf-2.0'
'-lpangowin32-1.0'
'-lgdi32'
'-lpangocairo-1.0'
'-lpango-1.0'
'-lcairo'
'-lgobject-2.0'
'-lgmodule-2.0'
'-lglib-2.0'
'-lintl'
'

Beachten Sie die ein Apostroph in der letzten Zeile. Es sieht aus wie argc ist um eins größer ist als sie sein sollte, und argv [argc - 1] ist null. Das Ausführen des gleichen Test unter Linux nicht dieses Ergebnis haben.

Das heißt, gibt es, sagen wir, einige, wie ich das Makefile speichern das Ergebnis von Pkg-config in eine Variable haben könnte, und dann diese Variable verwenden, anstatt die Back-tick-Operator?

War es hilfreich?

Lösung

  

Das heißt, gibt es, sagen wir, einige, wie ich das Makefile speichern das Ergebnis von Pkg-config in eine Variable haben könnte, und dann diese Variable verwenden, anstatt die Back-tick-Operator?

GTK_LIBS = $ (shell pkg-config --libs gtk + -2.0)

Andere Tipps

Sind Sie sicher, dass Sie die Marke versehen verwenden von Cygwin? Mit

which make
make --version

zu überprüfen -. Dies sollte zurückgeben "/ usr / bin / make" und "GNU 3.8 Marke [...]" oder etwas ähnliches

Hmmm ... haben Sie versucht,

make -d

Das gibt Ihnen einige (viele) von Debug-Ausgaben.

Meine Vermutung wäre, dass Cygwin gcc kann -Lc nicht umgehen: / mingw / lib. Versuchen Sie das mal mit einem Cygwin Pfad zu übersetzen.

GTK_LIBS = $(patsubst -Lc:/%,-L/cygdrive/c/%,$(shell pkg-config --libs gtk+-2.0))

Das Apostroph am Ende des „t“ Ausgangs kann ein Artefakt von CRLF Übersetzung sein. Ist Ihre pkg-config einen Cygwin-App? Die $ (Shell) Lösung, die ich früher geschrieben dabei helfen kann, wie GNU machen scheint Stile zu sein ziemlich tolerant unterschiedlicher Zeilenende.

Ich hatte ein ähnliches Problem und ich fand ein Update hier: http: //www.demexp. org / dokuwiki / en: demexp_build_on_windows

  

Achten Sie setzen / usr / bin vor / Cygwin / c / GTK / bin im PATH, so dass Sie / usr / bin / pkg-config. Dies ist erforderlich, da GTK der pkg-config nachbearbeitet Pfade, oft sie in ihren Windows-absoluten Pfade Äquivalente zu verwandeln. Als Folge Werkzeuge unter Cygwin können nicht verstehen, diese Pfade.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top