Pregunta

Estoy tratando de usar cygwin como un entorno de compilación en Windows.Tengo algunas dependencias en la 3ª parte de los paquetes, por ejemplo, GTK+.

Normalmente cuando voy a construir en Linux, en mi Make me puede agregar una llamada a pkg-config como un argumento para gcc, por lo que sale así:

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

Esto funciona muy bien en Linux, pero en cygwin que obtengo:

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

Ahora, estoy solo manualmente ejecutando pkg-config y pegar el resultado en el archivo Makefile, que es verdaderamente terrible.Hay una buena manera de solución o corrección para este problema?

Hacer no es el culpable.Puedo copiar y pegar la línea de comandos que hacen que se utiliza para llamar a gcc, y que por sí mismo se ejecute gcc, que se detiene con ":Argumento no válido".

Escribí un pequeño programa de prueba para imprimir los argumentos de línea de comandos:

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

Aviso de las comillas simples.

$ 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

Se ejecuta a través del programa de prueba:

$ ./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'
'

Aviso la única cita en la última línea.Parece argc es uno más grande de lo que debería ser, y argv[argc - 1] es nulo.Ejecución de la misma prueba en Linux no tiene este resultado.

Dicho esto, hay, digamos, de alguna manera yo podría tener el Makefile almacenar el resultado de pkg-config en una variable, y luego usar esa variable, en lugar de utilizar la parte de atrás la marca de la operadora?

¿Fue útil?

Solución

Dicho esto, hay, digamos, de alguna manera yo podría tener el Makefile almacenar el resultado de pkg-config en una variable, y luego usar esa variable, en lugar de utilizar la parte de atrás la marca de la operadora?

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

Otros consejos

Está usted seguro de que está usando la marca proporcionada por Cygwin?Uso

which make
make --version

para el check - esto debería devolver "/usr/bin/make" y "Make de GNU 3.8 [...]" o algo similar.

Hmmm...has probado

make -d

Que le den algunas (muchas) de salida de depuración.

Mi conjetura sería que cygwin del gcc no puede manejar -Lc:/mingw/lib.Trate de traducir eso a un cygwin camino.

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

La única cita en la final de la "t" de salida puede ser un artefacto de CRLF traducción.Es su pkg-config una cygwin app?El $(shell), solución que he publicado anteriormente puede ayudar con esto, como GNU make parece ser bastante tolerante con las distintas final de línea de estilos.

Yo tenía un problema similar y he encontrado una solución aquí: http://www.demexp.org/dokuwiki/en:demexp_build_on_windows

Cuidar a poner /usr/bin antes de /cygwin/c/GTK/bin en la RUTA de acceso para que usted use /usr/bin/pkg-config.Esto es necesario porque GTK es pkg-config post-procesos de caminos, a menudo, transformándolas en las Ventanas de sus rutas absolutas equivalentes.Como consecuencia de ello, las herramientas de bajo cygwin no pueden entender esos caminos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top