باستخدام `pkg-config` كما وسيطة سطر الأوامر تحت cygwin/msys باش
-
01-07-2019 - |
سؤال
أحاول استخدام cygwin مثل بناء بيئة ويندوز.لدي بعض التبعيات على 3rd الطرف حزم ، على سبيل المثال ، GTK+.
عادة عندما أقوم ببناء تحت لينكس في Makefile يمكنني إضافة استدعاء pkg-config كحجة دول مجلس التعاون الخليجي ، لذلك يخرج مثل ذلك:
gcc example.c `pkg-config --libs --cflags gtk+-2.0`
هذا يعمل بشكل جيد تحت لينكس, ولكن في سيغوين أحصل على:
:Invalid argument make: *** [example] Error 1
الآن, أنا فقط يدويا تشغيل pkg-config و لصق الإخراج في Makefile, الذي هو حقا رهيب.هل هناك طريقة جيدة إلى حل أو إصلاح هذه المشكلة ؟
جعل لا الجاني.لا يمكن نسخ ولصق سطر الأوامر التي تجعل يستخدم للاتصال دول مجلس التعاون الخليجي ، وهذا في حد ذاته سوف تعمل دول مجلس التعاون الخليجي ، الذي يوقف مع ":وسيطة غير صالحة".
كتبت اختبار صغير برنامج لطباعة وسيطات سطر الأوامر:
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] null.تشغيل نفس الاختبار على لينكس لا يكون هذا نتيجة.
وقال أن هناك بعض طريقة يمكن أن يكون Makefile متجر نتيجة pkg-التكوين في متغير ومن ثم استخدام هذا المتغير بدلا من استخدام الجزء الخلفي-القراد المشغل ؟
المحلول
وقال أن هناك بعض طريقة يمكن أن يكون Makefile متجر نتيجة pkg-التكوين في متغير ومن ثم استخدام هذا المتغير بدلا من استخدام الجزء الخلفي-القراد المشغل ؟
GTK_LIBS = $(شل pkg-config --يبس gtk+-2.0)
نصائح أخرى
هل أنت متأكد من أن كنت تستخدم تجعل المقدمة من Cygwin?استخدام
which make
make --version
للتحقق من هذا يجب أن عودة "/usr/bin/جعل" و "جنو جعل 3.8 [...]" أو شيئا من هذا القبيل.
هممم...هل حاولت
make -d
من شأنها أن تعطيك بعض (الكثير) من التصحيح الانتاج.
وتخميني هو أن cygwin دول مجلس التعاون لا يمكن التعامل مع-Lc:/مينغو/lib.محاولة ترجمة ذلك إلى cygwin المسار.
GTK_LIBS = $(patsubst -Lc:/%,-L/cygdrive/c/%,$(shell pkg-config --libs gtk+-2.0))
واحد الاقتباس في نهاية "t" قد يكون الإخراج قطعة أثرية من CRLF الترجمة.هو pkg-config سيغوين التطبيق ؟ دولار(شل) حل نشرت في وقت سابق قد تساعد مع هذا ، غنو تجعل يبدو إلى حد ما تسامحا من خط مختلف تنتهي الأساليب.
لدي مشكلة مشابهة و وجدت إصلاح هنا: http://www.demexp.org/dokuwiki/en:demexp_build_on_windows
الحرص على وضع /usr/bin قبل /cygwin/c/GTK/bin في المسار الخاص بك بحيث يمكنك استخدام /usr/bin/pkg-config.هذا هو المطلوب لأن GTK هي pkg-التكوين ما بعد العمليات مسارات, في كثير من الأحيان تغيير في ويندوز مسارات مطلقة في حكمه.ونتيجة لذلك, أدوات تحت cygwin قد لا يفهم تلك المسارات.