Я пытаюсь использовать cygwin в качестве среды сборки под Windows. У меня есть некоторые зависимости от сторонних пакетов, например, GTK +.
Обычно, когда я делаю сборку под Linux, в своем Makefile я могу добавить вызов pkg-config в качестве аргумента для gcc, так что получается так:
gcc example.c `pkg-config --libs --cflags gtk+-2.0`
Это прекрасно работает под Linux, но в cygwin я получаю:
:Invalid argument
make: *** [example] Error 1
Прямо сейчас я просто вручную запускаю pkg-config и вставляю вывод в Makefile, что действительно ужасно. Есть ли хороший способ обойти или исправить эту проблему?
Сделать не виновник. Я могу скопировать и вставить командную строку, которая делает использование для вызова gcc, и которая сама по себе запустит gcc, который останавливается с ": неверный аргумент".
Я написал небольшую тестовую программу для вывода аргументов командной строки:
for (i = 0; i < argc; i++)
printf("'%s'\n", argv[i]);
Обратите внимание на одинарные кавычки.
$ 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
Запуск через тестовую программу:
$ ./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'
'
Обратите внимание на одну одинарную кавычку в последней строке. Похоже, argc на единицу больше, чем должно быть, а argv [argc - 1] равно нулю. Запуск такого же теста в Linux не дает такого результата.
Тем не менее, есть, скажем, какой-нибудь способ, которым я мог бы заставить Makefile сохранить результат pkg-config в переменную, а затем использовать эту переменную вместо использования оператора обратной галочки?